পাইথনের স্ট্যান্ডার্ড লাইব্রেরির timeit মডিউলের Timer ক্লাস এবং অন্যান্য সুবিধাজনক ফাংশনগুলো ছোট ছোট পাইথন কোড বিট এক্সিকিউট হতে কত সময় লাগে তা মাপার একটি মেকানিজম প্রদান করার জন্য ডিজাইন করা হয়েছে। মডিউলটির একটি কমান্ড লাইন ইন্টারফেস আছে এবং ফাংশনগুলো প্রোগ্রামের ভিতর থেকেও কল করা যায়।
timeit() ফাংশন
এক্সিকিউশন টাইম মাপার সবচেয়ে সহজ উপায় হলো নিচের সুবিধাজনক ফাংশন ব্যবহার করা:
এই ফাংশন Timer ক্লাসের একটি অবজেক্ট রিটার্ন করে। এটি মূলত দুটি প্যারামিটার নেয়।
stmt − একটি স্ট্রিং যাতে এক্সিকিউশন টাইম মাপার জন্য একটি বৈধ পাইথন স্টেটমেন্ট থাকে।
setup − একটি স্ট্রিং যাতে একটি পাইথন স্টেটমেন্ট থাকে যা একবার এক্সিকিউট হবে, মূলত কিছু অবজেক্ট বা ভেরিয়েবল ইনিশিয়ালাইজ করার জন্য।
উভয় স্ট্রিং মাল্টিপল স্টেটমেন্ট ধারণ করতে পারে সেমিকোলন (;) বা নিউলাইন দ্বারা আলাদা করে, এবং উভয়ই ডিফল্টভাবে pass কীওয়ার্ড। আরেকটি অপশনাল প্যারামিটার number দেওয়া যেতে পারে যা 'stmt'-এর এক্সিকিউশন সংখ্যা নির্দেশ করে।
নিচের উদাহরণে ০-১০০ রেঞ্জের সংখ্যাগুলোর ক্যুমুলেটিভ অ্যাডিশন হাজার বার করার 데 প্রয়োজনীয় সময় মাপা হয়েছে।
import timeit
setupcode = "s = 0"
function = '''
for x in range(100):
s = s + x
'''
print(timeit.timeit(setup=setupcode, stmt=function, number=1000))
এখানে একটি স্ট্রিংে একটি for লুপ আছে যার মধ্যে রেঞ্জ ০-১০০-এর সংখ্যাগুলো যোগ করা হচ্ছে। এই স্ট্রিং stmt প্যারামিটার। যোগ করার জন্য, একটি ভেরিয়েবল ইনিশিয়ালাইজ করা হয়েছে setupcode স্ট্রিং দ্বারা। timeit() ফাংশন সেকেন্ডে প্রয়োজনীয় সময় ক্যালকুলেট করে।
আউটপুট
0.03055878530880241
Timer ক্লাস
একই ফলাফল প্রথমে একটি Timer অবজেক্ট তৈরি করে এবং তারপর সেটিতে timeit() মেথড এক্সিকিউট করে পাওয়া যায়।
repeat()
Timer ক্লাসের একটি repeat() মেথডও আছে যা timeit()-কে বারবার কল করে। এটি সকল কলের একটি তালিকা রিটার্ন করে।
উপরের কোডের একটি অবজেক্ট-অরিয়েন্টেড ভার্সন নিচে দেওয়া হলো:
import timeit
setupcode = "s = 0"
function = '''
for x in range(100):
s = s + x
'''
t = timeit.Timer(setup=setupcode, stmt=function)
print(t.timeit(number=1000))
print('calling repeat():', t.repeat(3, 1000))
আউটপুট
0.019971274194651528 calling repeat(): [0.023369810546474253, 0.020518432391765262, 0.02075439436427058]
কমান্ড লাইন ইন্টারফেস
উল্লেখ্য timeit মডিউলের একটি কমান্ড লাইন ইন্টারফেস আছে। মডিউলটিকে পাইথন স্ক্রিপ্ট এক্সিকিউশনের জন্য কমান্ড লাইনে -m অপশন ব্যবহার করে ইম্পোর্ট করা হয়। নিচের কমান্ড লাইন অপশনগুলো বিভিন্ন প্যারামিটার যেমন সেটআপ এবং এক্সিকিউটেবল কোড, রিপিট ফ্রিকোয়েন্সি, ইত্যাদি সংজ্ঞায়িত করে।
| -n N, --number = N | 'statement' কতবার এক্সিকিউট হবে |
| -r N, --repeat = N | টайমার কতবার রিপিট হবে (ডিফল্ট 3) |
| -s S, --setup = S | শुरুরে একবার এক্সিকিউট হওয়া স্টেটমেন্ট (ডিফল্ট pass) |
| -v, --verbose | রস টাইমিং রেজাল্ট প্রিন্ট করুন; রিপিট করুন আরও ডিজিট প্রিসিশনের জন্য |
| -h, --help | একটি সংক্ষিপ্ত ব্যবহার মেসেজ প্রিন্ট করে এবং এক্সিট করে |
আগের উদাহরণ কোডের কমান্ড লাইন সমতুল্য নিচে দেওয়া হলো:
C:\Users\acer>python -m timeit -s "s = 0" "for x in range(100): s = s + x" 10000 loops, best of 3: 22.4 usec per loop