مصنف کی طرف سے تصویر
ایک سافٹ ویئر ڈویلپر کے طور پر، آپ نے غالباً یہ اقتباس سنا ہوگا۔ "وقت سے پہلے اصلاح تمام برائیوں کی جڑ ہے"آپ کے کیریئر میں ایک بار سے زیادہ۔ اگرچہ چھوٹے منصوبوں کے لیے اصلاح بہت مددگار (یا بالکل ضروری) نہیں ہوسکتی ہے، لیکن پروفائلنگ اکثر مددگار ثابت ہوتی ہے۔
ایک ماڈیول کوڈنگ مکمل کرنے کے بعد، اپنے کوڈ کو پروفائل کرنا ایک اچھا عمل ہے تاکہ اندازہ ہو سکے کہ ہر ایک حصے پر عمل درآمد میں کتنا وقت لگتا ہے۔ اس سے کوڈ کی بو کی شناخت میں مدد مل سکتی ہے اور کوڈ کے معیار کو بہتر بنانے کے لیے اصلاح کی رہنمائی کر سکتا ہے۔ لہذا اصلاح کرنے سے پہلے ہمیشہ اپنے کوڈ کو پروفائل کریں!
پہلے قدم اٹھانے کے لیے، یہ گائیڈ آپ کو ازگر میں پروفائلنگ کے ساتھ شروع کرنے میں مدد کرے گا — بلٹ ان کا استعمال کرتے ہوئے وقت اور سی پروفائل ماڈیولز آپ Python اسکرپٹ کے اندر کمانڈ لائن انٹرفیس اور مساوی کال ایبلز دونوں کو استعمال کرنا سیکھیں گے۔
ٹائمٹ ماڈیول Python معیاری لائبریری کا حصہ ہے اور کچھ سہولت کے فنکشنز پیش کرتا ہے جو کوڈ کے مختصر ٹکڑوں کو وقت کے لیے استعمال کیا جا سکتا ہے۔
آئیے ازگر کی فہرست کو تبدیل کرنے کی ایک سادہ سی مثال لیتے ہیں۔ ہم اس کا استعمال کرتے ہوئے فہرست کی الٹ کاپی حاصل کرنے کے عمل کے اوقات کی پیمائش کریں گے:
- la
reversed()
فنکشن، اور - فہرست کاٹنا.
>>> nums=[6,9,2,3,7]
>>> list(reversed(nums))
[7, 3, 2, 9, 6]
>>> nums[::-1]
[7, 3, 2, 9, 6]
کمانڈ لائن پر ٹائمٹ چل رہا ہے۔
آپ چلا سکتے ہیں۔ timeit
نحو کا استعمال کرتے ہوئے کمانڈ لائن پر:
$ python -m timeit -s 'setup-code' -n 'number' -r 'repeat' 'stmt'
آپ کو بیان فراہم کرنے کی ضرورت ہے۔ stmt
جن کی پھانسی کا وقت ناپا جانا ہے۔
آپ وضاحت کر سکتے ہیں۔ setup
کوڈ جب ضرورت ہو - مختصر آپشن -s یا طویل آپشن - سیٹ اپ کا استعمال کرتے ہوئے۔ سیٹ اپ کوڈ صرف ایک بار چلایا جائے گا۔
۔ number
بیان چلانے کے لیے اوقات: مختصر آپشن -n یا طویل آپشن -نمبر اختیاری ہے۔ اور اس چکر کو دہرانے کی تعداد: مختصر آپشن -r یا طویل آپشن -repeat بھی اختیاری ہے۔
آئیے اپنی مثال کے طور پر مندرجہ بالا کو دیکھیں:
یہاں فہرست بنانا ہے۔ setup
کوڈ اور فہرست کو تبدیل کرنا وہ بیان ہے جس کا وقت مقرر کیا جانا ہے:
$ python -m timeit -s 'nums=[6,9,2,3,7]' 'list(reversed(nums))'
500000 loops, best of 5: 695 nsec per loop
جب آپ اقدار کی وضاحت نہیں کرتے ہیں۔ repeat
5 کی ڈیفالٹ ویلیو استعمال ہوتی ہے۔ اور جب آپ وضاحت نہیں کرتے number
، کوڈ کو ضرورت کے مطابق کئی بار چلایا جاتا ہے تاکہ کل وقت تک پہنچ سکے۔ کم از کم 0.2 سیکنڈ.
یہ مثال واضح طور پر بیان پر عمل کرنے کے لئے اوقات کی تعداد کا تعین کرتی ہے:
$ python -m timeit -s 'nums=[6,9,2,3,7]' -n 100Bu000 'list(reversed(nums))'
100000 loops, best of 5: 540 nsec per loop
کی ڈیفالٹ قدر repeat
5 ہے، لیکن ہم اسے کسی بھی مناسب قیمت پر سیٹ کر سکتے ہیں:
$ python3 -m timeit -s 'nums=[6,9,2,3,7]' -r 3 'list(reversed(nums))'
500000 loops, best of 3: 663 nsec per loop
آئیے لسٹ سلائسنگ اپروچ کو بھی وقت دیں:
$ python3 -m timeit -s 'nums=[6,9,2,3,7]' 'nums[::-1]'
1000000 loops, best of 5: 142 nsec per loop
ایسا لگتا ہے کہ فہرست کو کاٹنے کا طریقہ تیز تر ہے (تمام مثالیں اوبنٹو 3.10 پر ازگر 22.04 میں ہیں)۔
ایک ازگر اسکرپٹ میں ٹائمٹ چل رہا ہے۔
Python اسکرپٹ کے اندر ٹائمٹ چلانے کے مساوی یہ ہے:
import timeit setup = 'nums=[9,2,3,7,6]'
number = 100000
stmt1 = 'list(reversed(nums))'
stmt2 = 'nums[::-1]' t1 = timeit.timeit(setup=setup,stmt=stmt1,number=number)
t2 = timeit.timeit(setup=setup,stmt=stmt2,number=number) print(f"Using reversed() fn.: {t1}")
print(f"Using list slicing: {t2}")
۔ timeit()
کال قابل عمل درآمد کا وقت لوٹاتا ہے۔ stmt
لیے number
اوقات کی یاد رکھیں کہ ہم واضح طور پر اس بات کا ذکر کر سکتے ہیں کہ کتنی بار چلنا ہے، یا بنانا ہے۔ number
1000000 کی ڈیفالٹ ویلیو لیں۔
Output >>
Using reversed() fn.: 0.08982690000000002
Using list slicing: 0.015550800000000004
یہ بیان کو چلاتا ہے — ٹائمر فنکشن کو دہرائے بغیر — مخصوص کے لیے number
اوقات کا اور پھانسی کا وقت لوٹاتا ہے۔ اس کا استعمال بھی کافی عام ہے۔ time.repeat()
اور کم از کم وقت لیں جیسا کہ دکھایا گیا ہے:
import timeit setup = 'nums=[9,2,3,7,6]'
number = 100000
stmt1 = 'list(reversed(nums))'
stmt2 = 'nums[::-1]' t1 = min(timeit.repeat(setup=setup,stmt=stmt1,number=number))
t2 = min(timeit.repeat(setup=setup,stmt=stmt2,number=number)) print(f"Using reversed() fn.: {t1}")
print(f"Using list slicing: {t2}")
یہ کوڈ کو چلانے کے عمل کو دہرائے گا۔ number
اوقات کی repeat
اوقات کی تعداد اور کم از کم عملدرآمد کا وقت لوٹاتا ہے۔ یہاں ہمارے پاس 5 بار کی 100000 تکرار ہیں۔
Output >>
Using reversed() fn.: 0.055375300000000016
Using list slicing: 0.015101400000000043
ہم نے دیکھا ہے کہ شارٹ کوڈ کے ٹکڑوں پر عمل درآمد کے اوقات کی پیمائش کے لیے ٹائم کا استعمال کیسے کیا جا سکتا ہے۔ تاہم، عملی طور پر، ایک مکمل Python اسکرپٹ کو پروفائل کرنا زیادہ مددگار ہے۔
یہ ہمیں تمام فنکشنز اور میتھڈ کالز کے ایگزیکیوشن اوقات فراہم کرے گا — بشمول بلٹ ان فنکشنز اور طریقے۔ لہذا ہم زیادہ مہنگی فنکشن کالز کا بہتر اندازہ حاصل کر سکتے ہیں اور اصلاح کے مواقع کی نشاندہی کر سکتے ہیں۔ مثال کے طور پر: ایک API کال ہو سکتی ہے جو بہت سست ہے۔ یا کسی فنکشن میں ایک لوپ ہو سکتا ہے جسے مزید Pythonic سمجھ کے اظہار سے تبدیل کیا جا سکتا ہے۔
آئیے سیکھتے ہیں کہ cProfile ماڈیول (Python معیاری لائبریری کا حصہ بھی ہے) کا استعمال کرتے ہوئے Python اسکرپٹ کو کیسے پروفائل کیا جائے۔
مندرجہ ذیل Python اسکرپٹ پر غور کریں:
# main.py
import time def func(num): for i in range(num): print(i) def another_func(num): time.sleep(num) print(f"Slept for {num} seconds") def useful_func(nums, target): if target in nums: return nums.index(target) if __name__ == "__main__": func(1000) another_func(20) useful_func([2, 8, 12, 4], 12)
یہاں ہمارے تین افعال ہیں:
func()
جو کہ نمبروں کی ایک رینج سے گزرتا ہے اور انہیں پرنٹ کرتا ہے۔another func()
جس میں کال پر مشتمل ہے۔sleep()
تقریب.useful_func()
جو فہرست میں ہدف نمبر کا اشاریہ لوٹاتا ہے (اگر ہدف فہرست میں موجود ہے)۔
جب بھی آپ main.py اسکرپٹ چلاتے ہیں تو اوپر درج فنکشنز کو بلایا جائے گا۔
کمانڈ لائن پر cProfile چل رہا ہے۔
استعمال کرتے ہوئے کمانڈ لائن پر cProfile چلائیں:
python3 -m file-name.py
یہاں ہم نے فائل کا نام main.py رکھا ہے:
python3 -m main.py
اسے چلانے سے آپ کو درج ذیل آؤٹ پٹ ملنا چاہیے۔
Output >> 0 ... 999 Slept for 20 seconds
اور درج ذیل پروفائل:
یہاں، ncalls
فنکشن کو کالز کی تعداد سے مراد ہے اور percall
فی فنکشن کال کے وقت سے مراد ہے۔ اگر کی قدر ncalls
پھر ایک سے بڑا ہے۔ percall
تمام کالوں کا اوسط وقت ہے۔
اسکرپٹ کے نفاذ کے وقت کا غلبہ ہے۔ another_func
جو بلٹ ان استعمال کرتا ہے۔ sleep
فنکشن کال (20 سیکنڈ کے لیے سوتا ہے)۔ ہم دیکھتے ہیں کہ print
فنکشن کالز بھی کافی مہنگی ہیں۔
Python اسکرپٹ میں cProfile کا استعمال
کمانڈ لائن پر cProfile چلانے کے دوران ٹھیک کام کرتا ہے، آپ Python اسکرپٹ میں پروفائلنگ کی فعالیت بھی شامل کر سکتے ہیں۔ آپ cProfile کے ساتھ مل کر استعمال کر سکتے ہیں۔ pstats ماڈیول پروفائلنگ اور اعدادوشمار تک رسائی کے لیے۔
وسائل کے سیٹ اپ اور ٹیرڈاون کو بہتر طریقے سے ہینڈل کرنے کے لیے ایک بہترین عمل کے طور پر، بیان کے ساتھ استعمال کریں اور ایک پروفائل آبجیکٹ بنائیں جو سیاق و سباق کے مینیجر کے طور پر استعمال ہوتا ہے:
# main.py
import pstats
import time
import cProfile def func(num): for i in range(num): print(i) def another_func(num): time.sleep(num) print(f"Slept for {num} seconds") def useful_func(nums, target): if target in nums: return nums.index(target) if __name__ == "__main__": with cProfile.Profile() as profile: func(1000) another_func(20) useful_func([2, 8, 12, 4], 12) profile_result = pstats.Stats(profile) profile_result.print_stats()
آئیے تیار کردہ آؤٹ پٹ پروفائل پر گہری نظر ڈالیں:
جب آپ ایک بڑے اسکرپٹ کی پروفائلنگ کر رہے ہیں، تو یہ مددگار ثابت ہوگا۔ عملدرآمد کے وقت کے مطابق نتائج کو ترتیب دیں۔. ایسا کرنے کے لیے آپ کال کر سکتے ہیں۔ sort_stats
پروفائل آبجیکٹ پر اور عمل درآمد کے وقت کی بنیاد پر ترتیب دیں:
...
if __name__ == "__main__": with cProfile.Profile() as profile: func(1000) another_func(20) useful_func([2, 8, 12, 4], 12) profile_result = pstats.Stats(profile) profile_result.sort_stats(pstats.SortKey.TIME) profile_result.print_stats()
جب آپ اب اسکرپٹ چلاتے ہیں، تو آپ کو وقت کے حساب سے ترتیب شدہ نتائج دیکھنے کے قابل ہونا چاہیے:
مجھے امید ہے کہ یہ گائیڈ آپ کو ازگر میں پروفائلنگ شروع کرنے میں مدد کرے گا۔ ہمیشہ یاد رکھیں، اصلاح کو کبھی بھی پڑھنے کی اہلیت کی قیمت پر نہیں آنا چاہیے۔ اگر آپ دوسرے پروفائلرز کے بارے میں جاننے میں دلچسپی رکھتے ہیں، بشمول تھرڈ پارٹی Python پیکجز، تو اسے دیکھیں Python پروفائلرز پر مضمون.
بالا پریا سی ہندوستان سے ایک ڈویلپر اور تکنیکی مصنف ہے۔ وہ ریاضی، پروگرامنگ، ڈیٹا سائنس، اور مواد کی تخلیق کے چوراہے پر کام کرنا پسند کرتی ہے۔ اس کی دلچسپی اور مہارت کے شعبوں میں DevOps، ڈیٹا سائنس، اور قدرتی زبان کی پروسیسنگ شامل ہیں۔ وہ پڑھنے، لکھنے، کوڈنگ اور کافی سے لطف اندوز ہوتی ہے! فی الحال، وہ سیکھنے اور اپنے علم کو ڈویلپر کمیونٹی کے ساتھ بانٹنے کے لیے ٹیوٹوریلز، کیسے گائیڈز، رائے کے ٹکڑوں اور مزید بہت کچھ لکھ کر کام کر رہی ہے۔
- SEO سے چلنے والا مواد اور PR کی تقسیم۔ آج ہی بڑھا دیں۔
- پلیٹو ڈیٹا ڈاٹ نیٹ ورک ورٹیکل جنریٹو اے آئی۔ اپنے آپ کو بااختیار بنائیں۔ یہاں تک رسائی حاصل کریں۔
- پلیٹوآئ اسٹریم۔ ویب 3 انٹیلی جنس۔ علم میں اضافہ۔ یہاں تک رسائی حاصل کریں۔
- پلیٹو ای ایس جی۔ آٹوموٹو / ای وی، کاربن، کلین ٹیک، توانائی ، ماحولیات، شمسی، ویسٹ مینجمنٹ یہاں تک رسائی حاصل کریں۔
- پلیٹو ہیلتھ۔ بائیوٹیک اینڈ کلینیکل ٹرائلز انٹیلی جنس۔ یہاں تک رسائی حاصل کریں۔
- چارٹ پرائم۔ ChartPrime کے ساتھ اپنے ٹریڈنگ گیم کو بلند کریں۔ یہاں تک رسائی حاصل کریں۔
- بلاک آفسیٹس۔ ماحولیاتی آفسیٹ ملکیت کو جدید بنانا۔ یہاں تک رسائی حاصل کریں۔
- ماخذ: https://www.kdnuggets.com/profiling-python-code-using-timeit-and-cprofile?utm_source=rss&utm_medium=rss&utm_campaign=profiling-python-code-using-timeit-and-cprofile
- : ہے
- : نہیں
- 10
- 100000
- 12
- 13
- 15٪
- 17
- 19
- 20
- 22
- 7
- 8
- 9
- a
- قابلیت
- ہمارے بارے میں
- اوپر
- بالکل
- تک رسائی حاصل
- ACM
- کے پار
- عمل
- شامل کریں
- تمام
- بھی
- ہمیشہ
- an
- اور
- کوئی بھی
- اے پی آئی
- نقطہ نظر
- کیا
- علاقوں
- AS
- At
- تصنیف
- اوسط
- کی بنیاد پر
- BE
- اس سے پہلے
- BEST
- بہتر
- دونوں
- تعمیر میں
- لیکن
- by
- فون
- کہا جاتا ہے
- کالز
- کر سکتے ہیں
- حاصل کر سکتے ہیں
- کیریئر کے
- CFM
- چیک کریں
- قریب
- کوڈ
- کوڈنگ
- کس طرح
- کامن
- کمیونٹی
- پر مشتمل ہے
- مواد
- مواد کی تخلیق
- سیاق و سباق
- سہولت
- قیمت
- مل کر
- تخلیق
- تخلیق
- مخلوق
- اس وقت
- سائیکل
- اعداد و شمار
- ڈیٹا سائنس
- پہلے سے طے شدہ
- ڈیولپر
- DevOps
- do
- نہیں
- ہر ایک
- پوری
- مساوی
- مثال کے طور پر
- مثال کے طور پر
- عملدرآمد
- پھانسی
- مہنگی
- مہارت
- اظہار
- تیز تر
- چند
- فائل
- آخر
- پہلا
- پہلا قدم
- کے بعد
- کے لئے
- سے
- تقریب
- فعالیت
- افعال
- پیدا
- حاصل
- دے دو
- اچھا
- زیادہ سے زیادہ
- رہنمائی
- ہدایات
- ہینڈل
- ہے
- سنا
- مدد
- مدد گار
- مدد کرتا ہے
- اس کی
- یہاں
- امید ہے کہ
- کس طرح
- کیسے
- تاہم
- HTML
- HTTPS
- i
- خیال
- شناخت
- if
- درآمد
- کو بہتر بنانے کے
- in
- شامل
- سمیت
- انڈکس
- بھارت
- کے اندر
- دلچسپی
- دلچسپی
- انٹرفیس
- چوراہا
- IT
- KDnuggets
- علم
- زبان
- بڑے
- جانیں
- سیکھنے
- کم سے کم
- لائبریری
- امکان
- پسند
- لائن
- لنکڈ
- لسٹ
- لانگ
- دیکھو
- مین
- بنا
- مینیجر
- بہت سے
- ریاضی
- مئی..
- پیمائش
- ماپا
- ذکر
- طریقہ
- طریقوں
- شاید
- کم سے کم
- ماڈیول
- ماڈیولز
- زیادہ
- نامزد
- قدرتی
- قدرتی زبان
- قدرتی زبان عملیات
- ضروری
- ضرورت
- کبھی نہیں
- نوٹس..
- اب
- تعداد
- تعداد
- اعتراض
- حاصل کرنا
- of
- تجویز
- اکثر
- on
- ایک بار
- ایک
- صرف
- رائے
- مواقع
- اصلاح کے
- اختیار
- or
- دیگر
- ہمارے
- باہر
- پیداوار
- پیکجوں کے
- حصہ
- فی
- ٹکڑے ٹکڑے
- پلاٹا
- افلاطون ڈیٹا انٹیلی جنس
- پلیٹو ڈیٹا
- پریکٹس
- حال (-)
- پرنٹس
- عمل
- پروسیسنگ
- پروفائل
- پروفائلنگ
- پروگرامنگ
- منصوبوں
- فراہم
- ازگر
- معیار
- اقتباس
- رینج
- تک پہنچنے
- پڑھنا
- مراد
- یاد
- دوبارہ
- کی جگہ
- ضرورت
- وسائل
- نتائج کی نمائش
- واپسی
- واپسی
- جڑ
- رن
- چل رہا ہے
- چلتا ہے
- s
- سائنس
- اسکرپٹ
- سکرپٹ
- سیکنڈ
- سیکشنز
- دیکھنا
- لگتا ہے
- دیکھا
- مقرر
- سیٹ
- سیٹ اپ
- اشتراک
- وہ
- مختصر
- ہونا چاہئے
- دکھایا گیا
- سادہ
- سست
- چھوٹے
- So
- سافٹ ویئر کی
- مخصوص
- معیار
- شروع
- بیان
- کے اعداد و شمار
- مراحل
- موزوں
- سپر
- نحو
- T1
- لے لو
- لیتا ہے
- ہدف
- انسو کا گرنا
- ٹیکنیکل
- سے
- کہ
- ۔
- ان
- تو
- وہاں.
- تیسری پارٹی
- اس
- تین
- کے ذریعے
- وقت
- وقت ختم ہوا
- اوقات
- کرنے کے لئے
- بھی
- کل
- سبق
- اوبنٹو
- us
- استعمال کی شرائط
- استعمال کیا جاتا ہے
- استعمال
- کا استعمال کرتے ہوئے
- قیمت
- اقدار
- we
- جب
- جبکہ
- کس کی
- گے
- ساتھ
- کام کر
- کام کرتا ہے
- مصنف
- تحریری طور پر
- آپ
- اور
- زیفیرنیٹ