2010-04-17 18 views
5

Hava durumu verilerini her x dakikada bir x saat için indirmem gereken bir program (temptrack) var. time.sleep(x*60) kullanarak her x dakikada nasıl indirileceğini anladım, ancak bu işlemi belirli bir süre boyunca nasıl tekrarlayacağımı bilmiyorum.Python'da x dakika için bir şeyi nasıl tekrar edebilirim?

GÜNCELLEME: Çözüm gönderen herkese teşekkür ederiz. Örnekte "datetime.datetime.now() + datetime.timedelta (saat = x)" i işaretledim çünkü en iyi yanıtı anlayabiliyordum çünkü amacım için çok iyi çalışacak gibi görünüyor.

cevap

4

Yaptığınız her şeyi yapmayı durdurmak istediğiniz zamanı hesaplayın ve zaman sınırlamasının sona ermediğini her seferinde kontrol edin. Bunun gibi:

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

Bu, tam olarak bilmediğim bir şeydi. Çok teşekkür ederim. – ErikT

-2

Belki de sizi yanlış anladım, ancak sadece yeterli sayıda çalıştıran bir döngüye koyun. Örneğin, bu yüzden 24 kere indirmeniz gerekir 2 saat boyunca her 5 dakikada bir indirmek için:

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

Eğer parameterizable olmasını gerekiyorsa, bu sadece: Bir Aradığınız

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

Bu basit bir çözümdür, ancak işlevi yürütme süresi, yürütme süreleri arasındaki süreye benzerse, tam olarak istenmeyebilir. –

+0

Teşekkürler. İlk örneğiniz iyi çalışıyor. Sadece "in range (totalTime/frequency)" için kullanacağım ve bu iyi çalışmalı. Biliyorum (tam sayı kullanıyorum, kayan nokta değil) ama çok doğru olması gerekmiyor. – ErikT

+1

Gerçek bir listeye ihtiyacınız olmadıkça range() işlevini kullanmaktan kaçının. Bunun yerine sadece xrange kullanmak için çalıştırmak gerekiyorsa. Bu, kodunuzu optimize eder, çünkü range() tüm listeyi allcript eder, xrange() ise sadece bir yineleyici olur. NOT: python3'te sadece range() ve xrange() – Dacav

0

overkill biraz olsun ama arka plan görevleri çalıştırmak için, bir GUI gerek, özellikle ben sadece Python sched buldum PyQT QSystemTrayIcon ile rota ve QTimer

4

kontrol öneriyoruz standart kütüphane.

İlgili konular