2010-04-17 4 views
5

나는 x 시간 동안 매 x 분마다 날씨 데이터를 다운로드해야하는 프로그램 (temptrack)이 있습니다. time.sleep(x*60)을 사용하여 매 x 분을 다운로드하는 방법을 알아 냈습니다. 그러나 특정 시간 동안이 프로세스를 반복하는 방법을 알지 못합니다.Python에서 x 분 동안 어떻게 반복 할 수 있습니까?

업데이트 : 해결책을 게시 한 모든 사람들에게 감사드립니다. "datetime.datetime.now() + datetime.timedelta (hours = x)"를 사용하여 가장 좋은 답변을 찾을 수 있었기 때문에 최상의 답을 얻었습니다.

답변

4

당신이하고있는 일을 그만두고 싶은 시간을 계산하고, 시간 제한이 만료되지 않았을 때마다 확인하십시오. 이와 같이 :

finish_time = datetime.datetime.now() + datetime.timedelta(hours=6) 
while datetime.datetime.now() < finish_time: 
    do_something() 
    sleep_for_a_bit() 
+0

이것은 정확히 내가 모르는 것이지만, 내가 찾고있는 것입니다. 고맙습니다. – ErikT

-2

아마 내가 너를 오해하고 있지만 충분한 횟수만큼 반복되는 루프에 넣을 수 있습니다. 예를 들어, 그래서, 당신이 24 시간을 다운로드해야 2 시간 동안 5 분마다 다운로드 :

for i in range(24): 
    download() 
    sleep(5*60) 

당신이 파라미터 화 될 필요하면, 그것은 단지 : 당신이 찾고있는

from __future__ import division 
from math import ceil 
betweenDLs = 5 # minutes 
totalTime = 2*60 # minutes 
for i in range(int(ceil(totalTime/betweenDLs))): 
    download() 
    sleep(betweenDLs*60) 
+2

이것은 간단한 해결책이지만 함수를 실행하는 데 걸리는 시간이 실행 ​​사이의 시간과 비슷한 경우 원하는 것이 아닙니다. –

+0

고맙습니다. 귀하의 첫 번째 예제는 잘 작동합니다. 나는 "범위 (totalTime/frequency)"에서 "for for"을 사용할 것이고 그것은 잘 작동 할 것이다. 둥근 것입니다 (부동 소수점이 아닌 정수를 사용함). 그러나 매우 정확할 필요는 없습니다. – ErikT

+1

실제 목록을 필요로하지 않는 한 range()를 사용하지 않는 것이 좋습니다. 대신 xrange를 사용하기 위해 실행해야하는 경우. range()는 전체 목록을 할당하기 때문에 xrange()는 단지 반복자이므로 코드를 최적화합니다. 참고 : 파이썬 3에서는 range() 만 xrange()와 같은 동작을합니다. – Dacav

3

스케줄러.

체크 this thread.

+0

아니요. 그러나 어쨌든 당신을 감사하십시오. – ErikT

0

은 과잉의 비트 수 있지만, 백그라운드 작업을 실행하기 위해, 당신이 GUI를 필요 특히, 난 그냥 파이썬에서 sched을 발견 한 PyQt는의 QSystemTrayIcon와 노선과 QTimer

4

체크 아웃 권하고 싶습니다 표준 라이브러리.

관련 문제