पायथन गति परीक्षण - समय का अंतर - मिलीसेकंड


136

कोड के एक सेक्शन को गति देने के लिए पायथन में 2 बार तुलना करने का उचित तरीका क्या है? मैंने एपीआई डॉक्स पढ़ने की कोशिश की। मुझे यकीन नहीं है कि मैं टाइमडेल्टा बात को समझ सकता हूं।

अब तक मेरे पास यह कोड है:

from datetime import datetime

tstart = datetime.now()
print t1

# code to speed test

tend = datetime.now()
print t2
# what am I missing?
# I'd like to print the time diff here

15
आपने t2-t1 क्यों नहीं छापा? क्या आपने घटाव से रोका?
एस.लूट।

18
लगता है, मैं "यह इतना आसान नहीं हो सकता था" पल।
बड्डीजियो

जवाबों:


191

datetime.timedelta सिर्फ दो डेटासेट के बीच का अंतर है ... इसलिए यह समय की अवधि की तरह है, दिन / सेकंड / माइक्रोसेकंड में

>>> import datetime
>>> a = datetime.datetime.now()
>>> b = datetime.datetime.now()
>>> c = b - a

>>> c
datetime.timedelta(0, 4, 316543)
>>> c.days
0
>>> c.seconds
4
>>> c.microseconds
316543

ध्यान रखें कि c.microsecondsकेवल समयबद्धता के माइक्रोसेकंड भाग को वापस करता है! समय के उद्देश्यों के लिए हमेशा उपयोग करें c.total_seconds()

आप datetime.timedelta के साथ गणित के सभी प्रकार कर सकते हैं, जैसे:

>>> c / 10
datetime.timedelta(0, 0, 431654)

यह अधिक उपयोगी हो सकता है, हालांकि दीवारकॉक समय के बजाय सीपीयू समय को देखना ... हालांकि यह ऑपरेटिंग सिस्टम पर निर्भर है ... यूनिक्स जैसी प्रणालियों के तहत, 'समय' कमांड देखें।


कुल मिनटों में रुचि रखने वाला कोई भी व्यक्ति int(c.total_seconds() / 60)इस मामले में उपयोग कर सकता है
sufinawaz

2
Timeit मॉड्यूल के लिए पेज का कहना है कि मॉड्यूल "निष्पादन समय को मापने के लिए आम जाल के एक नंबर से बचा जाता है।" क्या यह दृष्टिकोण (datetime.now का उपयोग करके) उन किसी भी नुकसान के अधीन है?
कुजूरू

@kuzzooroo हाँ, यह है! इस विधि के बजाय समयसीमा का उपयोग करना बेहतर होगा! उदाहरण के लिए, मेरे पास एक बड़े अजगर परियोजना में एक परीक्षण है, जब इस पद्धति का उपयोग करके एक माना जाता है कि परिणाम 0.25s रनटाइम में होता है। वास्तव में, और समय के अनुसार, उक्त फ़ंक्शन का रनटाइम वास्तव में 30 सेकंड है!
kazamjt 12

62

पाइथन 2.7 के बाद से टाइमडेल्टा.टोटल_सेंड्स () विधि है। इसलिए, बीता हुआ मिलिसेकंड पाने के लिए:

>>> import datetime
>>> a = datetime.datetime.now()
>>> b = datetime.datetime.now()
>>> delta = b - a
>>> print delta
0:00:05.077263
>>> int(delta.total_seconds() * 1000) # milliseconds
5077


20

आप यह भी उपयोग कर सकते हैं:

import time

start = time.clock()
do_something()
end = time.clock()
print "%.2gs" % (end-start)

या आप अजगर प्रोफाइलरों का उपयोग कर सकते हैं ।


1
जब start = time.clock()इसे प्रिंट करता है DeprecationWarning: time.clock has been deprecated in Python 3.3 and will be removed from Python 3.8: use time.perf_counter or time.process_time instead
कंटैंगो

16

मुझे पता है कि यह देर हो चुकी है, लेकिन मुझे वास्तव में उपयोग करना पसंद है:

import time
start = time.time()

##### your timed code here ... #####

print "Process time: " + (time.time() - start)

time.time()युग के बाद से आप सेकंड देता है। क्योंकि यह सेकंड में एक मानकीकृत समय है, आप प्रक्रिया समय (सेकंड में) प्राप्त करने के लिए अंत समय से प्रारंभ समय को घटा सकते हैं। time.clock()बेंचमार्किंग के लिए अच्छा है, लेकिन मैंने इसे बेकार पाया है यदि आप जानना चाहते हैं कि आपकी प्रक्रिया में कितना समय लगा। उदाहरण के लिए, "मेरी प्रक्रिया में 10 सेकंड लगते हैं" कहने की तुलना में यह अधिक सहज है कि "मेरी प्रक्रिया में 10 प्रोसेसर क्लॉक यूनिट लगते हैं"

>>> start = time.time(); sum([each**8.3 for each in range(1,100000)]) ; print (time.time() - start)
3.4001404476250935e+45
0.0637760162354
>>> start = time.clock(); sum([each**8.3 for each in range(1,100000)]) ; print (time.clock() - start)
3.4001404476250935e+45
0.05

ऊपर दिए गए पहले उदाहरण में, आपको time.clock के लिए 0.05 का समय दिखाया गया है () समय के लिए 0.06377 बनाम ()

>>> start = time.clock(); time.sleep(1) ; print "process time: " + (time.clock() - start)
process time: 0.0
>>> start = time.time(); time.sleep(1) ; print "process time: " + (time.time() - start)
process time: 1.00111794472

दूसरे उदाहरण में, किसी तरह प्रोसेसर समय "0" दिखाता है, भले ही प्रक्रिया एक सेकंड के लिए सो गई हो। time.time()सही ढंग से 1 सेकंड से थोड़ा अधिक दिखाता है।


NameError: नाम 'समय' को परिभाषित नहीं किया गया है
जो

आपको import timeकथन की आवश्यकता है
mgoldwasser

5

निम्नलिखित कोड समय detla प्रदर्शित करना चाहिए ...

from datetime import datetime

tstart = datetime.now()

# code to speed test

tend = datetime.now()
print tend - tstart

4

आप बस अंतर प्रिंट कर सकते हैं:

print tend - tstart

4

मैं पायथन प्रोग्रामर नहीं हूं, लेकिन मुझे पता है कि Google का उपयोग कैसे करें और यहां मैंने जो पाया है: आप "-" ऑपरेटर का उपयोग करते हैं। अपना कोड पूरा करने के लिए:

from datetime import datetime

tstart = datetime.now()

# code to speed test

tend = datetime.now()
print tend - tstart

इसके अतिरिक्त, ऐसा लगता है कि आप समय की गणना करने के लिए स्ट्रैपटाइम () फ़ंक्शन का उपयोग कर सकते हैं ताकि समय आपको प्रसन्न कर सके।


प्रश्न स्तर पर दूसरी टिप्पणी देखें।
बडीजोई

15
"लेकिन मुझे पता है कि Google का उपयोग कैसे करना है" - जाहिर है, हालांकि, आप नहीं जानते कि स्टैक ओवरफ्लो का उपयोग कैसे करें, क्योंकि इस वेबसाइट का पूरा उद्देश्य लोगों से प्रोग्रामिंग प्रश्नों को सही तरीके से पूछना और उनका जवाब देना है, न कि इस बारे में बताने के लिए कि "आप इसके बजाय गॉगल कैसे कर सकते थे"।
हज्जाज़मैन

2

time.time () / डेटाइम त्वरित उपयोग के लिए अच्छा है, लेकिन हमेशा 100% सटीक नहीं होता है। इस कारण से, मुझे पता है कि क्या है, यह जानने के लिए std lib profilers (विशेषकर हॉटशॉट) में से एक का उपयोग करना पसंद है ।


2

आप प्रोफाइल मॉड्यूल को देखना चाह सकते हैं । आपको बेहतर रीडिंग मिलेगी कि आपकी मंदी कहाँ है, और आपके अधिकांश काम स्वचालित रूप से पूरे हो जाएंगे।


2

यहाँ एक कस्टम फंक्शन है जो माटलैब के / ऑक्टेव की नकल करता है tic toc कार्यों करता है।

उपयोग का उदाहरण:

time_var = time_me(); # get a variable with the current timestamp

... run operation ...

time_me(time_var); # print the time difference (e.g. '5 seconds 821.12314 ms')

समारोह :

def time_me(*arg):
    if len(arg) != 0: 
        elapsedTime = time.time() - arg[0];
        #print(elapsedTime);
        hours = math.floor(elapsedTime / (60*60))
        elapsedTime = elapsedTime - hours * (60*60);
        minutes = math.floor(elapsedTime / 60)
        elapsedTime = elapsedTime - minutes * (60);
        seconds = math.floor(elapsedTime);
        elapsedTime = elapsedTime - seconds;
        ms = elapsedTime * 1000;
        if(hours != 0):
            print ("%d hours %d minutes %d seconds" % (hours, minutes, seconds)) 
        elif(minutes != 0):
            print ("%d minutes %d seconds" % (minutes, seconds))
        else :
            print ("%d seconds %f ms" % (seconds, ms))
    else:
        #print ('does not exist. here you go.');
        return time.time()

ट्रेसबैक (सबसे हालिया कॉल अंतिम): फ़ाइल "redis-get-response.py", पंक्ति 22, में <मॉड्यूल> time_var = time_me (); # वर्तमान टाइमस्टैम्प फ़ाइल के साथ एक चर प्राप्त करें "redis-get-response.py", पंक्ति 20, time_me वापसी time.time में () NameError: नाम 'समय' परिभाषित नहीं है
जो

0

आप मॉड्यूल की तरह एक स्क्रिप्ट का परीक्षण करने के लिए समयसीमा का उपयोग कर सकते हैं

$ python -mtimeit -s 'import module'

0

तीर: पायथन के लिए बेहतर तारीखें और समय

import arrow
start_time = arrow.utcnow()
end_time = arrow.utcnow()
(end_time - start_time).total_seconds()  # senconds
(end_time - start_time).total_seconds() * 1000  # milliseconds
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.