2014-06-23 7 views
18

मेरे पास थोड़ी देर लूप है, और मैं इसे 15 मिनट तक चलाना चाहता हूं। यह वर्तमान में है:पाइथन लूप कुछ सेकंड के लिए चलाने के लिए

while True: 
    #blah blah blah 

(इस के माध्यम से चलाता है, और फिर पुन: प्रारंभ होता मैं इसे 15 मिनट में यह पाश बाहर निकालता है के बाद छोड़कर ऐसा करने के लिए जारी रखने की जरूरत है।)

धन्यवाद!

उत्तर

45

इस प्रयास करें:

import time 

t_end = time.time() + 60 * 15 
while time.time() < t_end: 
    # do whatever you do 

यह 15 मिनट x 60 एस = 900 सेकंड के लिए चलेंगे।

फ़ंक्शन time.time 1 जनवरी 1 9 70 से सेकंड में वर्तमान समय लौटाता है। मान फ़्लोटिंग पॉइंट में है, इसलिए आप इसे उप-दूसरे परिशुद्धता के साथ भी उपयोग कर सकते हैं। शुरुआत में मूल्य t_end की गणना "अब" + 15 मिनट होने के लिए की जाती है। लूप तब तक चलेगा जब तक कि वर्तमान समय इस प्रीसेट समाप्ति समय से अधिक न हो जाए।

+0

धन्यवाद मैंने मूल रूप से केवल 60 सेकंड के साथ इसका परीक्षण किया और यह बंद हो गया, इसलिए मुझे पता है कि 15 मिनट भी काम करेंगे। – oam811

+0

एक और सवाल: क्या निम्नलिखित वाक्यविन्यास काम करता है? यदि कुंजी [pygame.K_LEFT]: उत्तर = "बाएं" f = open ("answer.rtf", "a") f.write (उत्तर) f.close() यह मुझे खोलने नहीं देगा टेक्स्टफाइल के बाद, मैं सोच रहा हूं कि क्या मैं कुछ गलत कर रहा हूं या यदि मेरा कंप्यूटर गड़बड़ कर रहा है। – oam811

+0

कोड में मामूली वाक्यविन्यास त्रुटियों को ढूंढना SO टिप्पणियों से बहुत मुश्किल है, इसलिए शायद आपको एक और प्रश्न बनाना चाहिए। हालांकि, कम से कम अगर ऑपरेशन गलत है, तो = = के बजाय == होना चाहिए, और कोलन "बाएं" के बाद होना चाहिए। यदि आप इसे उचित प्रयास के साथ काम नहीं कर सकते हैं, तो एक और प्रश्न पोस्ट करें। (बस सुनिश्चित करें कि आप इंडेंटेशन के साथ कुछ भी गलत नहीं करते हैं।) – DrV

2

अगर मैं तुम्हें समझ में, आप इसे एक datetime.timedelta साथ कर सकते हैं -

import datetime 

endTime = datetime.datetime.now() + datetime.timedelta(minutes=15) 
while True: 
    if datetime.datetime.now() >= endTime: 
    break 
    # Blah 
    # Blah 
+1

धन्यवाद यह काम करता है, लेकिन मैं सिर्फ डॉवी के जवाब का उपयोग कर रहा हूं क्योंकि यह मेरे लिए अधिक समझ में आता है। – oam811

+0

@Elliott, क्या कोई कारण है कि आपने अभी ब्रेक का उपयोग करने के बजाय समय कथन में सीधे() BobTuckerman

+0

@ बॉब ओपी के सवाल से मेल खाता है। –

-2

इस प्रयास करें:

import time 
import os 

n = 0 
for x in range(10): #enter your value here 
    print(n) 
    time.sleep(1) #to wait a second 
    os.system('cls') #to clear previous number 
        #use ('clear') if you are using linux or mac! 
    n = n + 1 
0

सीधे शब्दों में आप क्या कर सकते हैं यह

import time 
delay=60*15 ###for 15 minutes delay 
close_time=time.time()+delay 
while True: 
     ##bla bla 
     ###bla bla 
    if time.time()>close_time 
     break 
+0

या यहां तक ​​कि अधिक सरल 'जबकि close_time> time.time(): 'if.time()> close_time: break' की आवश्यकता के बिना ... – Fr0zenFyr

0

मैं खोज रहा था जब मुझे इस प्रश्न का सामना करना पड़ा तो एक आसान-पढ़ने-पढ़ने वाला समय-लूप। कुछ की तरह:

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 और अन्य पर कॉल किया जाएगा। कोई नींद की बजाय लूप में समय मापकर इसे ठीक कर सकता है() ...

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