API에서 데이터를 지속적으로 수집하는 가장 좋은 방법은 무엇입니까?

gvrlprncp

그래서 API에서 지속적으로 데이터를 수집 한 다음 주기적으로 (예 : 1 분마다) Excel 파일에 저장하는 Python 스크립트가 있습니다. 이를 위해 24/7 코드를 실행하는 VPS가 있습니다. 여러 소스의 데이터가 필요하고 서로 다른 빈도로 업데이트해야하므로 내 솔루션은 각 데이터 유형에 대해 별도의 함수를 만든 다음 모든 데이터를 별도의 스레드에서 호출하는 것이 었습니다.

예를 들어 다음 중 하나가 있습니다.

def ExchangeRateCheck(self):
    while True:
        try:
            self.exchangeRate = self.oanda.get_prices(instruments="AUD_USD").get('prices')[0]['ask']
        except:
            try:
                self.exchangeRate = requests.get('http://free.currencyconverterapi.com/api/v3/convert?q=AUD_USD').json()['results']['AUD_USD']['val']
            except:
                pass

        time.sleep(30)

ratethread = threading.Thread(target=self.ExchangeRateCheck, args=())
ratethread.daemon = True
ratethread.start()

API에 도달 할 수없는 시간을 고려하기 위해 모든 것이 try / except 절에 중첩됩니다. 그러나 내가 찾은 것은 일부 스레드가 알려지지 않은 이유로 특정 지점에서 여전히 종료된다는 것입니다.

내 질문은 다음과 같습니다.이 유형의 작업은 원격 VPS를 사용하고 while True 루프에서 별도의 기능을 사용하는 것이 최상의 솔루션입니까? 연중 무휴 24 시간 데이터를 수집하는 더 좋은 방법이 있습니까? 코드 실행이 중단되지 않도록 예외를 더 잘 처리 할 수 ​​있습니까?

내가 전문 개발자가 아니라고 말할 수 있듯이 모든 피드백은 높이 평가됩니다.

oliver2213

이것이 "최상의"방법입니까? 조건에 따라서. 솔직히이 모든 작업을 단일 스레드에서 수행 할 수는 있지만 http 요청을 만드는 데 걸리는 시간 때문에 시간이 약간 다를 수 있습니다.

그러나 몇 가지 유의해야 할 사항이 있습니다.

  • 당신은 try / except를 사용하고 있습니다. 이것은 좋은 것입니다. 그러나 당신은 특정한 오류를 특별히 받아들이지 않습니다. 이것은 일종의 나쁜 것입니다. 허용 할 오류 (예 : 서버에 연결할 수없는 오류, 유효하지 않은 json 콘텐츠 등)를 지정해야합니다. 알 수없는 오류를 제외하고 다음과 같이 다른 작업을 수행 할 수도 있습니다.

    try : do_something_here () madeUpError as e : print ( "Handled the made up error.") 제외 예외 as e : Print ( "뭔가 예기치 않은 일이 발생했습니다 : {}". format (e))

  • 데몬 스레드를 사용하고 있습니다. 데몬 스레드를 사용하면 프로그램을 먼저 중지하지 않고 종료 할 수 있습니다. 즉, 메인 스레드가 종료되면 전체 프로그램도 종료됩니다. 나는 이것이 당신이 원하는 것이라고 생각하지 않으며 프로그램이 1 초 이상 실행되고 종료되기 때문에 메인 스레드에서 무언가를하고 있다고 가정합니다. 데이터 검색 작업자가 데몬 인 특별한 이유가 있습니까?

  • 프로그램을 중단 할 수있는 쉬운 방법이 없습니다. 을 사용하는 대신 while True:threading.Event를 사용할 수 있습니다. 이것은 모든 워커가 종료되기를 원할 때 메인 스레드가 설정할 수있는 플래그입니다. 주 스레드는 KeyboardInterrupt를 제외하고 try /를 실행할 수 있으며, except 핸들러에서 해당 이벤트를 .set ()하여 작업자가 현재 수행중인 작업을 완료하면 종료하도록 지시 할 수 있습니다.
  • 보다 복잡한 스케줄링이 필요하다고 생각되는 경우 (한 작업자가 30 초마다, 5 분마다, 다른 작업자는 매일 오전 12시 30 분에 실행해야 할 수도 있음) 특별히 실행되도록 설계된 APScheduler 와 같은 라이브러리 사용을 고려할 수 있습니다. 특정 시간에 간격을두고 기능하고 다른 스케줄러를 지원합니다 (스레드를 사용하는 backgroundScheduler를 원할 것입니다).
  • 내가 볼 수있는 화면에 어떤 종류의 로깅이나 인쇄도 사용하지 않습니다. 오랫동안 실행될 예정이고 나중에 알고 싶은 오류가 발생할 수있는 경우 일반적으로 기록하는 것이 좋습니다. Python에는 표준 라이브러리와 함께 제공되는 멋진 로깅 모듈이 있으며 사용 방법에 대한 자습서도 있습니다. 로그 메시지를 터미널, 파일, 이메일 등을 통해 보낼 수 있습니다. 로깅 수준이 다르기 때문에 프로그램을 설정할 수 있습니다. 예를 들어 경고 만 출력하도록 설정할 수 있습니다. 반면 디버그 및 정보 메시지는 그렇지 않습니다. 인쇄됩니다.

도움이 되었기를 바랍니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

앱 데이터를 저장하고 앱에로드하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

MVC 패턴으로보기에 데이터를 보내는 데 가장 좋은 방법은 무엇입니까?

분류에서Dev

ASP.NET에서 AngularJS로 데이터를 전달하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

서버 업데이트를 자동으로 적용하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

맞춤형 Laravel 패키지에 데이터를 제공하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

ElasticSearch에서 집계 데이터를 인덱싱하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

API의 데이터로 복잡한 개체를 채우는 가장 좋은 방법은 무엇입니까?

분류에서Dev

데이터 지속성없이 Django에서 양식 크기를 조정하는 가장 좋은 방법 : 가장 Djangonic 방법은 무엇입니까?

분류에서Dev

listview의 모든 데이터를 서버로 보내는 가장 좋은 방법은 무엇입니까?

분류에서Dev

C에서 void 포인터로 정수를 저장하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

html 데이터 속성에 값을 저장하는 가장 좋은 방법은 무엇입니까

분류에서Dev

백그라운드에서 인터넷 연결을 지속적으로 확인하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

데이터베이스에서 데이터를 가져 오는 가장 좋은 방법은 무엇입니까?

분류에서Dev

Flutter에서 양식 필드를 동적으로로드하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

데이터를 유지하면서 라이브 데이터베이스를 업데이트하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

PHP와 HTML에서 uri를 동적으로 코딩하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

많은 열이있는 MySQLi에 데이터를 저장하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

파이썬에서 내 데이터로 배열을 만드는 가장 좋은 방법은 무엇입니까?

분류에서Dev

여러 테이블 / 하나의 데이터베이스에서 뷰로 데이터를 전달하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

많은 양의 데이터를 어레이에 저장하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

C #에서 SQL Server에 동적 행 수를 삽입하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

C ++에서 PayPal 적응 형 결제 API를 사용하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

Android 앱에서 서버의 데이터베이스로 데이터를 전송하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

cqlsh 요청으로 Cassandra에서 빼기를 수행하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

양극에서 음극으로 데이터 극성 변화를 감지하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

Django에서 양식의 임시 데이터를 저장하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

JHipster에서 초기 데이터를 저장하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

Unity3D Android에서 많은 양의 데이터를 로컬에 저장하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

USB 또는 이더넷을 지원하지 않는 컴퓨터에서 데이터를 가져 오는 가장 좋은 방법은 무엇입니까?

Related 관련 기사

  1. 1

    앱 데이터를 저장하고 앱에로드하는 가장 좋은 방법은 무엇입니까?

  2. 2

    MVC 패턴으로보기에 데이터를 보내는 데 가장 좋은 방법은 무엇입니까?

  3. 3

    ASP.NET에서 AngularJS로 데이터를 전달하는 가장 좋은 방법은 무엇입니까?

  4. 4

    서버 업데이트를 자동으로 적용하는 가장 좋은 방법은 무엇입니까?

  5. 5

    맞춤형 Laravel 패키지에 데이터를 제공하는 가장 좋은 방법은 무엇입니까?

  6. 6

    ElasticSearch에서 집계 데이터를 인덱싱하는 가장 좋은 방법은 무엇입니까?

  7. 7

    API의 데이터로 복잡한 개체를 채우는 가장 좋은 방법은 무엇입니까?

  8. 8

    데이터 지속성없이 Django에서 양식 크기를 조정하는 가장 좋은 방법 : 가장 Djangonic 방법은 무엇입니까?

  9. 9

    listview의 모든 데이터를 서버로 보내는 가장 좋은 방법은 무엇입니까?

  10. 10

    C에서 void 포인터로 정수를 저장하는 가장 좋은 방법은 무엇입니까?

  11. 11

    html 데이터 속성에 값을 저장하는 가장 좋은 방법은 무엇입니까

  12. 12

    백그라운드에서 인터넷 연결을 지속적으로 확인하는 가장 좋은 방법은 무엇입니까?

  13. 13

    데이터베이스에서 데이터를 가져 오는 가장 좋은 방법은 무엇입니까?

  14. 14

    Flutter에서 양식 필드를 동적으로로드하는 가장 좋은 방법은 무엇입니까?

  15. 15

    데이터를 유지하면서 라이브 데이터베이스를 업데이트하는 가장 좋은 방법은 무엇입니까?

  16. 16

    PHP와 HTML에서 uri를 동적으로 코딩하는 가장 좋은 방법은 무엇입니까?

  17. 17

    많은 열이있는 MySQLi에 데이터를 저장하는 가장 좋은 방법은 무엇입니까?

  18. 18

    파이썬에서 내 데이터로 배열을 만드는 가장 좋은 방법은 무엇입니까?

  19. 19

    여러 테이블 / 하나의 데이터베이스에서 뷰로 데이터를 전달하는 가장 좋은 방법은 무엇입니까?

  20. 20

    많은 양의 데이터를 어레이에 저장하는 가장 좋은 방법은 무엇입니까?

  21. 21

    C #에서 SQL Server에 동적 행 수를 삽입하는 가장 좋은 방법은 무엇입니까?

  22. 22

    C ++에서 PayPal 적응 형 결제 API를 사용하는 가장 좋은 방법은 무엇입니까?

  23. 23

    Android 앱에서 서버의 데이터베이스로 데이터를 전송하는 가장 좋은 방법은 무엇입니까?

  24. 24

    cqlsh 요청으로 Cassandra에서 빼기를 수행하는 가장 좋은 방법은 무엇입니까?

  25. 25

    양극에서 음극으로 데이터 극성 변화를 감지하는 가장 좋은 방법은 무엇입니까?

  26. 26

    Django에서 양식의 임시 데이터를 저장하는 가장 좋은 방법은 무엇입니까?

  27. 27

    JHipster에서 초기 데이터를 저장하는 가장 좋은 방법은 무엇입니까?

  28. 28

    Unity3D Android에서 많은 양의 데이터를 로컬에 저장하는 가장 좋은 방법은 무엇입니까?

  29. 29

    USB 또는 이더넷을 지원하지 않는 컴퓨터에서 데이터를 가져 오는 가장 좋은 방법은 무엇입니까?

뜨겁다태그

보관