timeit
মডিউলটির সাথে খেলার পরে , আমি এর ইন্টারফেসটি পছন্দ করি না, যা নিম্নলিখিত দুটি পদ্ধতির তুলনায় এত মার্জিত নয়।
নিম্নলিখিত কোডটি পাইথন 3 এ রয়েছে।
সাজসজ্জার পদ্ধতি
@ মাইক এর পদ্ধতিতে এটি প্রায় একই রকম। এটিকে আরও ভাল করতে এখানে আমি যুক্ত kwargs
এবং functools
মোড়ানো করি।
def timeit(func):
@functools.wraps(func)
def newfunc(*args, **kwargs):
startTime = time.time()
func(*args, **kwargs)
elapsedTime = time.time() - startTime
print('function [{}] finished in {} ms'.format(
func.__name__, int(elapsedTime * 1000)))
return newfunc
@timeit
def foobar():
mike = Person()
mike.think(30)
প্রসঙ্গ ব্যবস্থাপক পদ্ধতি
from contextlib import contextmanager
@contextmanager
def timeit_context(name):
startTime = time.time()
yield
elapsedTime = time.time() - startTime
print('[{}] finished in {} ms'.format(name, int(elapsedTime * 1000)))
উদাহরণস্বরূপ, আপনি এটি ব্যবহার করতে পারেন:
with timeit_context('My profiling code'):
mike = Person()
mike.think()
এবং with
ব্লকের কোডটির সময়সীমা নির্ধারণ করা হবে।
উপসংহার
প্রথম পদ্ধতিটি ব্যবহার করে, আপনি সাধারণ কোডটি পেতে ইয়েলি সাজসজ্জারকে মন্তব্য করতে পারেন। তবে এটি কেবল একটি ফাংশন সময় করতে পারে। যদি আপনার কোডের কিছু অংশ থাকে যা আপনি এটিকে কোনও ফাংশন হিসাবে তৈরি করবেন না, তবে আপনি দ্বিতীয় পদ্ধতিটি চয়ন করতে পারেন।
উদাহরণস্বরূপ, এখন আপনার আছে
images = get_images()
bigImage = ImagePacker.pack(images, width=4096)
drawer.draw(bigImage)
এখন আপনি bigImage = ...
লাইন সময় করতে চান । আপনি যদি এটি কোনও ফাংশনে পরিবর্তন করেন তবে তা হবে:
images = get_images()
bitImage = None
@timeit
def foobar():
nonlocal bigImage
bigImage = ImagePacker.pack(images, width=4096)
drawer.draw(bigImage)
দেখতে খুব দুর্দান্ত লাগছে না ... আপনি পাইথন 2 এ থাকলে কী nonlocal
কীওয়ার্ড নেই।
পরিবর্তে, দ্বিতীয় পদ্ধতিটি এখানে খুব ভাল ফিট করে:
images = get_images()
with timeit_context('foobar'):
bigImage = ImagePacker.pack(images, width=4096)
drawer.draw(bigImage)