পাইথনের গতির পরীক্ষা - সময় পার্থক্য - মিলিসেকেন্ড


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
আপনি টি 2-টি 1 মুদ্রণ করেননি কেন? বিয়োগ থেকে আপনাকে কী থামিয়েছে?
এস .লট

18
অনুমান করুন, আমার "মুহূর্তটি" এত সহজ হতে পারে না "।
বুডিজো

উত্তর:


191

datetime.timedelta কেবলমাত্র দুটি তারিখের মধ্যে পার্থক্য ... তাই এটি সময় / সেকেন্ড / মাইক্রোসেকেন্ডে সময়ের মতো period

>>> 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()

আপনি ডেটটাইম.টিমেডেলটা দিয়ে সমস্ত ধরণের গণিত করতে পারেন, যেমন:

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

প্রাচীরের ঘড়ির সময়ের পরিবর্তে সিপিইউয়ের সময়টি দেখার পক্ষে এটি আরও কার্যকর হতে পারে ... যদিও এটি অপারেটিং সিস্টেম নির্ভর করে ... ইউনিক্স-এর মতো সিস্টেমের অধীনে, 'সময়' কমান্ডটি পরীক্ষা করে দেখুন।


মোট মিনিট পেতে আগ্রহী যে কেউ int(c.total_seconds() / 60)এই ক্ষেত্রে ব্যবহার করতে পারেন
সুফিনওয়াজ

2
Timeit মডিউলের জন্য পৃষ্ঠা বলছেন যে মডিউল "মৃত্যুদন্ড বার পরিমাপের জন্য সাধারণ যাত্রীর সঙ্গের নিজলটবহর একটি নম্বর এড়াতে।" এই পদ্ধতির (ডেটটাইম.নু ব্যবহার করে) সেই কোনও সমস্যারই সাধ্য?
কুজ্জুরু

@ কুজ্জুরো হ্যাঁ, এটি! এই পদ্ধতির পরিবর্তে সময়কাল ব্যবহার করা ভাল! উদাহরণস্বরূপ, আমার একটি বড় অজগর প্রকল্পে একটি পরীক্ষা রয়েছে যা এই পদ্ধতিটি ব্যবহার করে যখন পরিমাপ করা হয় তখন অনুমিত 0.25s রানটাইমের ফলাফল হয়। বাস্তবে, এবং সময় অনুসারে, বলা ফাংশনের রানটাইমটি আসলে 30 সেকেন্ডের!
কাজামজট

62

পাইথন ২.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

উপরের প্রথম উদাহরণে, আপনাকে টাইম.লক () বনাম 0.06377 এর জন্য 0.05 সময় সময়কাল () এর জন্য দেখানো হবে

>>> 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 সেকেন্ডের চেয়ে একটু বেশি দেখায়।


নামের ত্রুটি: নাম 'সময়' সংজ্ঞায়িত করা হয়নি
জো

আপনার import timeবিবৃতিটি দরকার
মিগলডওয়াসার

5

নিম্নলিখিত কোডটি সময় ডিটলা প্রদর্শন করা উচিত ...

from datetime import datetime

tstart = datetime.now()

# code to speed test

tend = datetime.now()
print tend - tstart


4

আমি পাইথন প্রোগ্রামার নই, তবে গুগল কীভাবে ব্যবহার করতে হয় তা আমি জানি এবং আমি যা পেয়েছি তা এখানে: আপনি "-" অপারেটরটি ব্যবহার করেন। আপনার কোডটি সম্পূর্ণ করতে:

from datetime import datetime

tstart = datetime.now()

# code to speed test

tend = datetime.now()
print tend - tstart

অতিরিক্তভাবে, দেখে মনে হচ্ছে আপনি সময়টি দেওয়ার জন্য টাইমস্প্যান গণনা ফর্ম্যাট করতে strftime () ফাংশনটি ব্যবহার করতে পারেন তবে আপনাকে আনন্দিত করে তোলে।


প্রশ্ন স্তর দ্বিতীয় মন্তব্য দেখুন।
বুডিজো

14
"তবে গুগল কীভাবে ব্যবহার করতে হয় তা আমি জানি" - আপাতদৃষ্টিতে আপনি স্ট্যাক ওভারফ্লো কীভাবে ব্যবহার করবেন তা জানেন না, কারণ এই ওয়েবসাইটটির পুরো উদ্দেশ্য লোকেরা প্রোগ্রামিংয়ের প্রশ্নগুলি সঠিকভাবে এবং বিন্দুতে জিজ্ঞাসা করা এবং উত্তর দেওয়া, তা নয় কীভাবে "আপনি এর পরিবর্তে এটি গগলড করতে পারতেন" সম্পর্কে স্নারক দেওয়ার জন্য।
হিজাজমান

2

সময় ব্যবহারের সময় () / ডেটটাইম দ্রুত ব্যবহারের জন্য ভাল তবে সর্বদা 100% সুনির্দিষ্ট হয় না। সেই কারণে, আমি কি স্ট্যান্ড লিব প্রোফাইলার (বিশেষত হটশট) ব্যবহার করতে পছন্দ করি ।


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। # বর্তমান টাইমস্ট্যাম্প ফাইলের সাথে একটি পরিবর্তনশীল পান "redis-get-response.py", লাইন 20, টাইম_মে রিটার্ন সময়.টাইম (সময়) এর নাম: সময় 'নাম' সংজ্ঞায়িত করা হয়নি
জো

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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.