2011-01-18 18 views
6

मेरे पास एक लूप है जो एक समय में कुछ घंटों तक चलता है। मैं यह कैसे कह सकता हूं कि यह निर्धारित अंतराल पर कितना समय रहा है?पायथन -> समय थोड़ी देर लूप चल रहा है

सिर्फ एक सामान्य ... सवाल

संपादित करें: यह कुछ समय पाश कि क्रमपरिवर्तन चलाता है, तो मैं इसे समय हर 10 सेकंड चल मुद्रित हो सकती है?

उत्तर

8

के बजाय हर पाश पर समय की जाँच के लिए, आप एक टाइमर वस्तु

import time 
from threading import Timer 

def timeout_handler(timeout=10): 
    print time.time() 
    timer = Timer(timeout, timeout_handler) 
    timer.start() 

timeout_handler() 
while True: 
    print "loop" 
    time.sleep(1) 
+1

+1 मेरे उत्तर से बहुत अच्छा है, प्यार है कि पाइथन में ऐसी बैटरी शामिल हैं। – fmark

1

time.asctime() का उपयोग करके ऐसा करने के लिए एक बहुत ही आसान तरीका है। आप लूप में कहीं और लूप में कहीं भी प्रवेश करने से पहले एस्केम स्टोर करते हैं। संग्रहीत समय और वर्तमान समय के बीच के समय के अंतर की गणना करें और यदि वह अंतर 10 सेकंड है, तो संग्रहीत समय को वर्तमान समय में अपडेट करें और प्रिंट करें कि यह चल रहा है।

हालांकि, यह करने के लिए यह एक बहुत ही आसान तरीका है क्योंकि इसे कुछ मुड़ते और उबाऊ गणित की आवश्यकता होती है।

अपने उद्देश्य एक विशिष्ट एल्गोरिथ्म के क्रम जाँच करने के लिए है, तो आप timeit मॉड्यूल

आशा इस मदद करता है

2

के रूप में विख्यात का उपयोग कर बेहतर कर रहे हैं, यह एक बुरा हैक का एक छोटा सा है , क्योंकि इसमें प्रत्येक पुनरावृत्ति के समय की जांच करना शामिल है। इसे काम करने के लिए, आपको ऐसे कार्य करने की आवश्यकता है जो टाइमआउट के एक छोटे प्रतिशत के लिए चलें - यदि आपका लूप केवल हर मिनट फिर से चलाता है, तो यह हर दस सेकंड में प्रिंट नहीं करेगा। यदि आप बाधित होना चाहते हैं, तो आप मल्टीथ्रेडिंग पर विचार कर सकते हैं, या अधिमानतः यदि आप लिनक्स/मैक/यूनिक्स, सिग्नल पर हैं। आपका मंच क्या है?

import time 

timeout = 10 
first_time = time.time() 
last_time = first_time 
while(True): 
    pass #do something here 
    new_time = time.time() 
    if new_time - last_time > timeout: 
     last_time = new_time 
     print "Its been %f seconds" % (new_time - first_time) 

आउटपुट:

Its been 10.016000 seconds 
Its been 20.031000 seconds 
Its been 30.047000 seconds 
+0

ohmygosh मैं तुम्हें प्यार करता है, लेकिन 'pass' क्या करना है का उपयोग कर सकते हैं? क्या मैं इसके स्थान पर कुछ डालूं? – tekknolagi

+1

'पास' शून्य ऑपरेशन है, यह केवल प्लेसहोल्डर है और कुछ भी नहीं ([वास्तव में] (http://docs.python.org/reference/simple_stmts.html#pass))। बस इसे अपने कोड से बदलें। – fmark

+1

हम्म, मुझे 'टाइमर' ऑब्जेक्ट के बारे में पता नहीं था, मैं आपको नीचे दिए गए उत्तर में इसका उपयोग करने के लिए स्विच करने की सलाह दूंगा। – fmark

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