2012-10-20 2 views
0

나는 매우 긴 코드로 여기에 넣지 않았기 때문에 html 스크래핑을 한 다음 API를 사용하여 데이터를 가져 오는 스크레이퍼를 작성했습니다. 난 임의의 수면 방법을 구현하고 내 코드 내에서 그것을 사용하여 스로틀을 모니터링합니다. 그러나 나는이 코드를 지나치게 실행하지 않도록하고 싶다. 그래서 나의 생각은 3 ~ 4 시간 동안 실행 한 다음 숨을 쉴 수있게 한 다음 다시 실행하는 것이다. 나는 파이썬에서 이런 식으로 아무것도하지 않았지만 검색을 시도했지만 어디서부터 시작해야하는지에 대해서는 확실하지 않다. 이것에 대한 지침을 얻는다면 좋을 것이다. 파이썬에 대한 특정 모듈 링크가 있다면 큰 도움이 될 것입니다.Python : 한 시간 동안 실행되도록 코드 제한

관련이 있습니까? 나는이 수준의 합병증을 필요로하지 않습니까?

Suggestions for a Cron like scheduler in Python?

나는 매일 스크 레이 핑 작업에 대한 기능을 가지고, 나는 모든 함수를 호출하는 주요 방법이있다.

+0

@Martijn Pieters 오타를 수정 해 주셔서 감사합니다. –

답변

1

당신은 시간이 초과 된 후 메인 스레드에 인터럽트 신호를 예약 할 수 threading.Timer 객체를 사용할 수 있습니다.

+0

좋은 예를 들어 주셔서 감사합니다. 나는 cron 작업을 다룰 기회가 없다는 점을 잘 알고 있습니다. –

+1

@ null 가설 : 여기 있습니다 : http://www.unixgeeks.org/security/newbie/unix/cron-1.html – georg

+0

좋은 소식을 주셔서 감사합니다. –

1

시작한 시간을 메모하고 무언가를 실행하고 싶을 때마다 주어진 최대 시간을 초과하지 않았는지 확인하십시오. 이 같은 것을 시작해야합니다.

from datetime import datetime 
MAX_SECONDS = 3600 

# note the time you have started 
start = datetime.now() 

while True: 
    current = datetime.now() 
    diff = current-start 
    if diff.seconds >= MAX_SECONDS: 
     # break the loop after MAX_SECONDS 
     break 

    # MAX_SECONDS not exceeded, run more tasks 
    scrape_some_more() 

여기에 link to the datetime module documentation이 있습니다.

import thread, threading 

def longjob(): 
    try: 
     # do your job 
     while True: 
      print '*', 
    except KeyboardInterrupt: 
     # do your cleanup 
     print 'ok, giving up' 

def terminate(): 
    print 'sorry, pal' 
    thread.interrupt_main() 

time_limit = 5 # terminate in 5 seconds 
threading.Timer(time_limit, terminate).start() 
longjob() 

당신의 crontab에 넣고 모든 time_limit + 2 분 실행