2010-04-17 14 views
5

मेरे पास एक प्रोग्राम (प्रलोभन) है जहां मुझे एक्स एक्स घंटों के लिए हर एक्स मिनट में मौसम डेटा डाउनलोड करने की आवश्यकता है। मैंने यह पता लगाया है कि time.sleep(x*60) का उपयोग करके हर एक्स मिनट कैसे डाउनलोड करें, लेकिन मुझे कोई संकेत नहीं है कि इस प्रक्रिया को कुछ घंटों के लिए कैसे दोहराया जाए।मैं पायथन में एक्स मिनट के लिए कुछ कैसे दोहरा सकता हूं?

अद्यतन: समाधान पोस्ट करने वाले सभी लोगों के लिए धन्यवाद। मैंने "datetime.datetime.now() + datetime.timedelta (घंटे = 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

शायद मैं आपको गलत समझ रहा हूं, लेकिन इसे केवल एक लूप में डाल दें जो पर्याप्त संख्या में चलता है। उदाहरण के लिए, हर 5 मिनट में 2 घंटे के लिए आप 24 बार डाउनलोड करने की आवश्यकता डाउनलोड करने के लिए है, तो:

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

आप इसे की जरूरत है parameterizable हो सकता है, यह सिर्फ है:

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

धन्यवाद। आपका पहला उदाहरण अच्छी तरह से काम करता है। मैं बस "रेंज में (कुल समय/आवृत्ति)" का उपयोग करूंगा और इसे अच्छी तरह से काम करना चाहिए। मुझे पता है कि यह दौर जाएगा (जैसा कि मैं पूर्णांक का उपयोग कर रहा हूं, फ्लोटिंग पॉइंट नहीं) लेकिन यह बहुत सटीक नहीं होना चाहिए। – ErikT

+1

रेंज() का उपयोग करने से बचने का प्रयास करें जब तक आपको वास्तविक सूची की आवश्यकता न हो। यदि आपको इसके बजाय xrange का उपयोग करने की आवश्यकता है। यह आपके कोड को अनुकूलित करेगा, क्योंकि रेंज() पूरी सूची को आवंटित करता है, जबकि xrange() सिर्फ एक इटरेटर है। नोट: python3 में केवल रेंज() है और xrange() – Dacav

3

आप एक के लिए देख रहे हैं अनुसूचक।

this thread देखें।

+0

नहीं, वास्तव में नहीं। लेकिन वैसे भी धन्यवाद। – ErikT

0

overkill का एक सा हो सकता है, लेकिन पृष्ठभूमि में चल रहे कार्यों के लिए, खासकर यदि आप एक जीयूआई की जरूरत है, मैं QSystemTrayIcon साथ PyQt मार्ग और QTimer

4

मैं सिर्फ अजगर में sched पाया है बाहर की जाँच की सलाह देते हैं मानक पुस्तकालय

संबंधित मुद्दे