मैं खोज रहा था जब मुझे इस प्रश्न का सामना करना पड़ा तो एक आसान-पढ़ने-पढ़ने वाला समय-लूप। कुछ की तरह:
for sec in max_seconds(10):
do_something()
तो मैं इस सहायक बनाया:
# allow easy time-boxing: 'for sec in max_seconds(42): do_something()'
def max_seconds(max_seconds, *, interval=1):
interval = int(interval)
start_time = time.time()
end_time = start_time + max_seconds
yield 0
while time.time() < end_time:
if interval > 0:
next_time = start_time
while next_time < time.time():
next_time += interval
time.sleep(int(round(next_time - time.time())))
yield int(round(time.time() - start_time))
if int(round(time.time() + interval)) > int(round(end_time)):
return
यह केवल पूर्ण सेकंड जो मेरे यूज-केस के लिए ठीक था साथ काम करता है।
उदाहरण:
for sec in max_seconds(10) # -> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
for sec in max_seconds(10, interval=3) # -> 0, 3, 6, 9
for sec in max_seconds(7): sleep(1.5) # -> 0, 2, 4, 6
for sec in max_seconds(8): sleep(1.5) # -> 0, 2, 4, 6, 8
पता है कि अंतराल है कि सही नहीं है रहो, के रूप में मैं केवल पूर्ण सेकंड प्रतीक्षा (नींद कभी नहीं किसी भी अच्छे मेरे लिए बार < 1 सेकंड के साथ) था। तो यदि आपका काम 500 एमएस लेता है और आप 1 सेकेंड के अंतराल के लिए पूछते हैं, तो आपको 0, 500ms, 2000ms, 2500ms, 4000ms और अन्य पर कॉल किया जाएगा। कोई नींद की बजाय लूप में समय मापकर इसे ठीक कर सकता है() ...
धन्यवाद मैंने मूल रूप से केवल 60 सेकंड के साथ इसका परीक्षण किया और यह बंद हो गया, इसलिए मुझे पता है कि 15 मिनट भी काम करेंगे। – oam811
एक और सवाल: क्या निम्नलिखित वाक्यविन्यास काम करता है? यदि कुंजी [pygame.K_LEFT]: उत्तर = "बाएं" f = open ("answer.rtf", "a") f.write (उत्तर) f.close() यह मुझे खोलने नहीं देगा टेक्स्टफाइल के बाद, मैं सोच रहा हूं कि क्या मैं कुछ गलत कर रहा हूं या यदि मेरा कंप्यूटर गड़बड़ कर रहा है। – oam811
कोड में मामूली वाक्यविन्यास त्रुटियों को ढूंढना SO टिप्पणियों से बहुत मुश्किल है, इसलिए शायद आपको एक और प्रश्न बनाना चाहिए। हालांकि, कम से कम अगर ऑपरेशन गलत है, तो = = के बजाय == होना चाहिए, और कोलन "बाएं" के बाद होना चाहिए। यदि आप इसे उचित प्रयास के साथ काम नहीं कर सकते हैं, तो एक और प्रश्न पोस्ट करें। (बस सुनिश्चित करें कि आप इंडेंटेशन के साथ कुछ भी गलत नहीं करते हैं।) – DrV