cprofile و پروفایل پروفایل قطعی برنامه های پایتون را ارائه می دهند. نمایه مجموعه ای از آمار است که توصیف می کند چند بار و برای مدت زمان اجرای قسمت های مختلف برنامه. این آمار را می توان از طریق ماژول PSTATS در گزارش ها قالب بندی کرد.
کتابخانه استاندارد پایتون دو پیاده سازی متفاوت از همان رابط پروفایل را ارائه می دهد:
cprofile برای اکثر کاربران توصیه می شود. این یک پسوند C با سربار معقول است که باعث می شود برای پروفایل برنامه های طولانی مدت مناسب باشد. بر اساس LSPROF ، توسط برت روزن و تد Czotter کمک کرده است.
پروفایل ، یک ماژول خالص پایتون که رابط کاربری آن توسط CPROFILE تقلید می شود ، اما به برنامه های پروفایل قابل توجهی می افزاید. اگر می خواهید پروفایل را به نوعی گسترش دهید ، ممکن است با این ماژول کار ساده تر باشد. در ابتدا توسط جیم روسکیند طراحی و نوشته شده است.
ماژول های Profiler به گونه ای طراحی شده اند که مشخصات اجرای یک برنامه معین را ارائه دهند ، نه برای اهداف معیار (برای این ، زمان برای نتایج دقیق و دقیق وجود دارد). این امر به ویژه در مورد معیار کد پایتون در برابر کد C صدق می کند: پروفایل ها برای کد پایتون سربار را معرفی می کنند ، اما برای عملکردهای سطح C نیست ، بنابراین کد C سریعتر از هر پایتون به نظر می رسد.
کتابچه راهنمای کاربر فوری
این بخش برای کاربران ارائه شده است که "نمی خواهند کتابچه راهنما را بخوانند."این یک مرور کلی بسیار کوتاه را ارائه می دهد ، و به کاربر اجازه می دهد تا به سرعت پروفایل را روی یک برنامه موجود انجام دهد.
برای نشان دادن تابعی که یک آرگومان واحد را انجام می دهد ، می توانید انجام دهید:
(اگر دومی در سیستم شما در دسترس نیست ، از پروفایل به جای cprofile استفاده کنید.)
عمل فوق دوباره re.compile () و نتایج پروفایل را مانند موارد زیر اجرا می کند:
خط اول نشان می دهد که 214 تماس مورد بررسی قرار گرفت. از این تماس ها ، 207 بدوی بودند ، به این معنی که این تماس از طریق بازگشت القاء نشده است. خط بعدی: سفارش داده شده توسط: نام تجمعی ، نشان می دهد که از رشته متن در ستون سمت راست برای مرتب سازی خروجی استفاده شده است. عناوین ستون شامل موارد زیر است:
برای تعداد تماس ها
برای کل زمان صرف شده در عملکرد داده شده (و به استثنای زمان انجام شده در تماس با عملکردهای فرعی)
آیا مقدار Tottime توسط ncalls تقسیم شده است
آیا زمان تجمعی است که در این و کلیه زیرمجموعه ها (از دعوت تا خروج) صرف شده است. این شکل حتی برای عملکردهای بازگشتی دقیق است.
آیا مقدار Cumtime با تماس های بدوی تقسیم می شود
داده های مربوطه از هر عملکرد را ارائه می دهد
هنگامی که در ستون اول دو عدد وجود دارد (به عنوان مثال 3/1) ، این بدان معنی است که عملکرد مجدداً مورد استفاده قرار می گیرد. مقدار دوم تعداد تماس های بدوی و اولی تعداد کل تماس ها است. توجه داشته باشید که وقتی عملکرد مجدداً مورد استفاده قرار نمی گیرد ، این دو مقدار یکسان هستند و فقط شکل واحد چاپ می شود.
به جای چاپ خروجی در انتهای اجرای پروفایل ، می توانید با مشخص کردن نام پرونده در عملکرد () عملکرد () نتایج را در یک پرونده ذخیره کنید:
کلاس PSTATS. STATS نتایج پروفایل را از یک پرونده می خواند و آنها را به روش های مختلف قالب بندی می کند.
پرونده های CPROFILE و نمایه نیز می توانند به عنوان یک اسکریپت برای پروفایل یک اسکریپت دیگر استفاده شوند. مثلا:
-O نتایج پروفایل را به جای Stdout به یک پرونده می نویسد
-S یکی از مقادیر مرتب سازی sort_stats () را برای مرتب کردن خروجی توسط. این فقط در صورت عدم تأمی ن-O اعمال می شود.
-M مشخص می کند که یک ماژول به جای فیلمنامه در حال پروفایل است.
جدید در نسخه 3. 7: گزین ه-m را به cprofile اضافه کرد.
جدید در نسخه 3. 8: گزین ه-m را به پروفایل اضافه کرد.
کلاس آمار ماژول PSTATS روشهای مختلفی برای دستکاری و چاپ داده های ذخیره شده در یک فایل نتایج پروفایل دارد:
روش Strip_dirs () مسیر بیرونی را از تمام نام های ماژول حذف کرد. روش sort_stats () تمام ورودی ها را مطابق با رشته استاندارد/خط/نام/نام که چاپ شده است ، مرتب می کند. روش print_stats () تمام آمار را چاپ کرد. ممکن است تماس های مرتب سازی زیر را امتحان کنید:
اولین تماس در واقع لیست را با نام عملکرد مرتب می کند و تماس دوم آمار را چاپ می کند. موارد زیر چند تماس جالب برای آزمایش با:
این مشخصات را با زمان تجمعی در یک عملکرد مرتب می کند ، و سپس فقط ده خط مهم را چاپ می کند. اگر می خواهید بفهمید که الگوریتم ها چه زمان می گذارند ، خط فوق همان چیزی است که شما استفاده می کنید.
اگر به دنبال این بودید که ببینید چه کارکردهایی در حال حلقه زیاد است و زمان زیادی را می گیرید ، این کار را می کردید:
برای مرتب کردن مطابق زمان صرف شده در هر عملکرد ، و سپس آمار را برای ده عملکرد برتر چاپ کنید.
شما همچنین ممکن است امتحان کنید:
این همه آمار را با نام پرونده مرتب می کند ، و سپس آمار را فقط برای روش های کلاس کلاس چاپ می کند (از آنجا که آنها با __init__ در آنها هجی شده اند). به عنوان یک مثال نهایی ، می توانید امتحان کنید:
این خط آمار را با یک کلید اصلی زمان و یک کلید ثانویه از زمان تجمعی مرتب می کند و سپس برخی از آمار را چاپ می کند. به طور خاص ، این لیست ابتدا به 50 ٪ (Re: 5) از اندازه اصلی آن کاهش می یابد ، سپس فقط خطوط حاوی INIT حفظ می شوند و لیست زیر زیر مجموعه چاپ می شود.
اگر تعجب کردید که توابع فوق به چه عملکردی گفته می شود ، اکنون می توانید (P هنوز هم مطابق با آخرین معیارها طبقه بندی شده است):
و شما می توانید لیستی از تماس گیرندگان را برای هر یک از کارکردهای ذکر شده دریافت کنید.
اگر می خواهید عملکرد بیشتری داشته باشید ، باید کتابچه راهنما را بخوانید ، یا حدس بزنید که توابع زیر چه کاری انجام می دهند:
ماژول PSTATS که به عنوان یک اسکریپت فراخوانده شده است ، یک مرورگر آماری برای خواندن و بررسی زباله های پروفایل است. این یک رابط کاربری خط گرا ساده (با استفاده از CMD) و کمک تعاملی دارد.
مرجع پروفایل و ماژول cprofile ¶ ¶
هر دو ماژول های پروفایل و cprofile توابع زیر را ارائه می دهند:
مشخصات. اجرا (فرمان ، نام پرونده = هیچ ، مرتب سازی = - 1)
این عملکرد یک آرگومان واحد را می گیرد که می تواند به عملکرد EXEC () و نام پرونده اختیاری منتقل شود. در همه موارد این روال اجرا می شود:
و آمار پروفایل را از اعدام جمع می کند. اگر هیچ نام پرونده ای وجود ندارد ، این عملکرد به طور خودکار یک نمونه Stats را ایجاد می کند و یک گزارش پروفایل ساده را چاپ می کند. اگر مقدار مرتب سازی مشخص شود ، برای کنترل نحوه مرتب سازی نتایج به این نمونه آمار منتقل می شود.
مشخصات. runctx (فرمان ، گلوبال ها ، افراد محلی ، نام پرونده = هیچ ، مرتب سازی = - 1)
این عملکرد مشابه RUN () است ، با آرگومان های اضافه شده برای تهیه فرهنگ لغت های گلوبال ها و افراد محلی برای رشته فرمان. این روال اجرا می شود:
و آمار پروفایل را مانند عملکرد () در بالا جمع آوری می کند.
مشخصات کلاسپروفایل (تایمر = هیچ ، TimeUnit = 0. 0 ، Subcalls = TRUE ، BUINDINS = TRUE)
این کلاس معمولاً فقط در صورت نیاز به کنترل دقیق تر بر پروفایل از آنچه که عملکرد CPROFILE. RUN () ارائه می دهد ، استفاده می شود.
یک تایمر سفارشی را می توان برای اندازه گیری میزان طول مدت زمان برای اجرا از طریق آرگومان تایمر تهیه کرد. این باید تابعی باشد که یک شماره واحد را نشان می دهد که زمان فعلی را نشان می دهد. اگر عدد عدد صحیح باشد ، TimeUnit چند برابر کننده را مشخص می کند که مدت زمان هر واحد زمان را مشخص می کند. به عنوان مثال ، اگر تایمر بازده در هزاران ثانیه بازگردد ، واحد زمان 01/0 خواهد بود.
به طور مستقیم با استفاده از کلاس پروفایل اجازه می دهد تا نتایج پروفایل را بدون نوشتن داده های پروفایل به یک پرونده:
کلاس پروفایل همچنین می تواند به عنوان یک مدیر زمینه (فقط در ماژول CProfile پشتیبانی شود. به انواع Manager Manager مراجعه کنید):
در نسخه 3. 8 تغییر یافته است: پشتیبانی از Context Manager.
شروع به جمع آوری داده های پروفایل کنید. فقط در cprofile.
جمع آوری داده های پروفایل را متوقف کنید. فقط در cprofile.
جمع آوری داده های پروفایل را متوقف کرده و نتایج را به عنوان نمایه فعلی ضبط کنید.
print_stats (مرتب سازی = - 1)
یک شیء Stats را بر اساس مشخصات فعلی ایجاد کنید و نتایج را در STDOUT چاپ کنید.
نتایج مشخصات فعلی را به نام پرونده بنویسید.
CMD را از طریق EXEC () مشخص کنید.
CMD را از طریق EXEC () با محیط جهانی و محلی مشخص کنید.
عملکرد پروفایل (*args ، ** kwargs)
توجه داشته باشید که پروفایل فقط در صورت بازگشت فرمان/عملکرد به کار می رود. اگر مترجم خاتمه یابد (به عنوان مثال از طریق یک تماس sys. exit () در حین اجرای فرمان/عملکرد نامیده می شود) هیچ نتیجه پروفایل چاپ نمی شود.
کلاس آمار
تجزیه و تحلیل داده های پروفایل با استفاده از کلاس Stats انجام می شود.
PSTAT های کلاس. آمار ( *نام های پرونده یا مشخصات ، جریان = sys. stdout)
این سازنده کلاس نمونه ای از "شیء آمار" را از نام پرونده (یا لیست نام پرونده ها) یا از نمونه مشخصات ایجاد می کند. خروجی به جریان مشخص شده توسط جریان چاپ می شود.
پرونده انتخاب شده توسط سازنده فوق باید توسط نسخه مربوط به پروفایل یا CProfile ایجاد شده باشد. به طور خاص ، هیچ سازگاری پرونده ای با نسخه های آینده این پروفایل تضمین نشده است ، و هیچ سازگاری با پرونده های تولید شده توسط سایر پروفایل ها وجود ندارد ، یا همان پروفایل که روی یک سیستم عامل متفاوت اجرا می شود. در صورت ارائه چندین پرونده ، تمام آمار مربوط به عملکردهای یکسان به هم پیوسته می شوند ، به طوری که می توان دید کلی از چندین فرآیند را در یک گزارش واحد در نظر گرفت. در صورت نیاز به ترکیب پرونده های اضافی با داده ها در یک شیء Stats موجود ، می توان از روش ADD () استفاده کرد.
به جای خواندن داده های پروفایل از یک پرونده ، یک شیء cprofile. profile یا profile. profile می تواند به عنوان منبع داده پروفایل استفاده شود.
اشیاء آمار روشهای زیر را دارند:
این روش برای کلاس Stats تمام اطلاعات مسیر پیشرو را از نام پرونده ها حذف می کند. در کاهش اندازه چاپ بسیار مفید است تا در 80 ستون (نزدیک به) قرار بگیرد. این روش شیء را اصلاح می کند و اطلاعات سلب شده از بین می رود. پس از انجام عملیات نوار ، شیء در نظر گرفته می شود که ورودی های خود را به ترتیب "تصادفی" داشته باشد ، زیرا دقیقاً پس از اولیه سازی و بارگیری شی بود. اگر Strip_dirs () باعث شود دو نام عملکرد قابل تشخیص نباشد (آنها در همان خط همان نام پرونده قرار دارند و نام عملکردی دارند) ، پس از آن آمار برای این دو مدخل در یک ورودی واحد جمع می شود.
این روش از کلاس آمار ، اطلاعات پروفایل اضافی را در شیء پروفایل فعلی جمع می کند. آرگومان های آن باید به نام های پرونده ایجاد شده توسط نسخه مربوط به profile. run () یا cprofile. run () مراجعه کند. آمار برای توابع یکسان (Re: File ، Line ، Name) به طور خودکار در آمار تک عملکرد جمع می شوند.
داده های بارگذاری شده در شیء Stats را در پرونده ای به نام FileName ذخیره کنید. اگر وجود نداشته باشد ، پرونده ایجاد می شود و در صورت وجود بازنویسی می شود. این معادل روش همین نام در کلاسهای پروفایل است.
این روش با مرتب سازی آن مطابق با معیارهای ارائه شده ، شیء آمار را اصلاح می کند. آرگومان می تواند یک رشته یا یک enum sortkey باشد که اساس یک نوع را مشخص می کند (به عنوان مثال: "زمان" ، "نام" ، sortkey. time. time یا sortkey. name). آرگومان enums SortKey نسبت به استدلال رشته ای از این مزیت برخوردار است که مستعد ابتلا به خطا است.
هنگامی که بیش از یک کلید ارائه می شود ، از کلیدهای اضافی به عنوان معیارهای ثانویه استفاده می شود که در تمام کلیدهای انتخاب شده قبل از آنها برابری وجود داشته باشد. به عنوان مثال ، sort_stats (sortkey. name ، sortkey. file) تمام نوشته ها را مطابق با نام عملکرد خود مرتب می کند و با مرتب سازی بر اساس نام پرونده ، تمام اتصالات (نام عملکرد یکسان) را برطرف می کند.
برای استدلال رشته ، از اختصارات می توان برای هر نام کلیدی استفاده کرد ، تا زمانی که مخفف مبهم باشد.
موارد زیر رشته معتبر و مرتب سازی شده است:
رشته معتبر arg
تعداد تماس اولیه
توجه داشته باشید که انواع آمار به ترتیب نزولی است (قرار دادن بیشتر موارد وقت گیر) ، جایی که به عنوان جستجوی نام ، پرونده و شماره خط به ترتیب صعودی (الفبایی) است. تمایز ظریف بین sortkey. nfl و sortkey. stdname این است که نام استاندارد نوعی نام به عنوان چاپ است ، به این معنی که شماره های خط تعبیه شده به روشی عجیب و غریب مقایسه می شوند. به عنوان مثال ، خطوط 3 ، 20 و 40 (اگر نام پرونده ها یکسان بودند) در ترتیب رشته 20 ، 3 و 40 ظاهر می شوند. در حقیقت ، sort_stats (sortkey. nfl) همان sort_stats است (sortkey. name ، sortkey. filename ، sortkey. line).
به دلایل سازگاری به عقب ، آرگومان های عدد ی-1 ، 0 ، 1 و 2 مجاز هستند. آنها به ترتیب به عنوان "stdname" ، "تماس" ، "زمان" و "تجمعی" تعبیر می شوند. اگر از این فرمت سبک قدیمی (عددی) استفاده شود ، فقط از یک کلید مرتب سازی (کلید عددی) استفاده می شود و آرگومان های اضافی بی صدا نادیده گرفته می شوند.
جدید در نسخه 3. 7: Enum SortKey را اضافه کرد.
این روش برای کلاس Stats ترتیب لیست اصلی درون شی را معکوس می کند. توجه داشته باشید که به طور پیش فرض صعودی در مقابل سفارش نزولی به درستی بر اساس کلید نوع انتخاب انتخاب می شود.
این روش برای کلاس Stats گزارشی را که در مشخصات شرح داده شده است ، چاپ می کند.
ترتیب چاپ بر اساس آخرین عملیات sort_stats () انجام شده بر روی جسم (در معرض احتیاط ها در add () و Strip_dirs ()) است.
از آرگومان های ارائه شده (در صورت وجود) می توان برای محدود کردن لیست به ورودی های مهم استفاده کرد. در ابتدا ، این لیست به مجموعه کاملی از توابع پروفایل رسیده است. هر محدودیت یا یک عدد صحیح است (برای انتخاب تعداد خطوط) ، یا کسری اعشاری بین 0. 0 و 1. 0 فراگیر (برای انتخاب درصد خطوط) یا رشته ای که به عنوان یک عبارت معمولی تعبیر می شود (برای الگوی مطابقت با نام استانداردچاپ شده است). اگر چندین محدودیت ارائه شود ، آنها به صورت متوالی اعمال می شوند. مثلا:
ابتدا چاپ را به 10 ٪ اول لیست محدود می کند ، و سپس فقط کارکردهای چاپی که بخشی از نام پرونده بودند.*foo :. در مقابل ، دستور:
لیست را به کلیه توابع دارای نام پرونده محدود می کند.*foo: ، و سپس فقط 10 ٪ اول آنها را چاپ کنید.
این روش برای کلاس Stats لیستی از کلیه توابع را که هر عملکرد را در پایگاه داده پروفایل خوانده می شود ، چاپ می کند. سفارش با آنچه توسط print_stats () ارائه شده است یکسان است ، و تعریف استدلال محدود کننده نیز یکسان است. هر تماس گیرنده به خط خاص خود گزارش شده است. این قالب بسته به پروفایل تولید آمار کمی متفاوت است:
با مشخصات ، تعدادی در پرانتز بعد از هر تماس گیرنده نشان داده می شود تا نشان دهد چند بار این تماس خاص انجام شده است. برای راحتی ، یک عدد غیر پارنت دوم ، زمان تجمعی را که در عملکرد در سمت راست انجام می شود ، تکرار می کند.
با استفاده از CPROFILE ، هر تماس گیرنده سه شماره انجام می شود: تعداد دفعاتی که این تماس خاص انجام شده است ، و زمان های کل و تجمعی که در عملکرد فعلی صرف شده است در حالی که توسط این تماس گیرنده خاص فراخوانی شده است.
این روش برای کلاس Stats لیستی از تمام عملکردهایی را که توسط عملکرد مشخص شده نامیده می شود ، چاپ می کند. گذشته از این معکوس جهت تماس ها (Re: نامیده شده توسط VS خوانده شد) ، آرگومان ها و سفارشات با روش print_callers () یکسان است.
این روش نمونه ای از statsprofile را برمی گرداند ، که شامل نقشه برداری از نام عملکرد به مواردی از FunctionProfile است. هر نمونه FunctionProfile اطلاعات مربوط به مشخصات عملکرد مانند مدت زمان اجرای عملکرد را در اختیار دارد ، چند بار خوانده می شود ، و غیره
جدید در نسخه 3. 9: داده های زیر اضافه شده: statsprofile ، functionprofile. عملکرد زیر را اضافه کنید: get_stats_profile.
پروفایل قطعی چیست؟
پروفایل قطعی به معنای منعکس کننده این واقعیت است که تمام فراخوانی عملکرد ، بازگشت عملکرد و وقایع استثنا مورد بررسی قرار می گیرند و زمان بندی دقیقی برای فواصل بین این رویدادها انجام می شود (در طی آن زمان کد کاربر در حال اجرا است). در مقابل ، پروفایل آماری (که توسط این ماژول انجام نمی شود) به طور تصادفی نشانگر دستورالعمل مؤثر را نشان می دهد و در جایی که زمان صرف می شود ، استنباط می کند. تکنیک دوم به طور سنتی شامل سربار کمتری است (زیرا کد نیازی به ابزار دقیق ندارد) ، بلکه فقط نشانه های نسبی در مورد زمان صرف شده را ارائه می دهد.
در پایتون ، از آنجا که یک مترجم فعال در حین اجرای وجود دارد ، به منظور انجام پروفایل قطعی ، حضور کد ابزار شده لازم نیست. پایتون به طور خودکار قلاب (پاسخ به تماس اختیاری) را برای هر رویداد فراهم می کند. علاوه بر این ، ماهیت تفسیر پایتون تمایل به اضافه کردن آنقدر سربار به اجرای دارد ، که پروفایل قطعی تمایل دارد فقط در کاربردهای معمولی پردازش کوچک را اضافه کند. نتیجه این است که پروفایل قطعی چندان گران نیست ، اما آمار گسترده ای را در مورد اجرای یک برنامه پایتون ارائه می دهد.
از آمار شمارش تماس می توان برای شناسایی اشکالات موجود در کد (شمارش های شگفت آور) و شناسایی نقاط احتمالی گسترش خطی (تعداد تماس زیاد) استفاده کرد. از آمار داخلی می توان برای شناسایی "حلقه های داغ" که باید با دقت بهینه سازی شوند ، استفاده شود. برای شناسایی خطاهای سطح بالا در انتخاب الگوریتم ها باید از آمار زمان تجمعی استفاده شود. توجه داشته باشید که رسیدگی غیرمعمول بارهای تجمعی در این پروفایل اجازه می دهد تا آماری برای اجرای بازگشتی الگوریتم ها به طور مستقیم با پیاده سازی های تکراری مقایسه شود.
محدودیت ها¶
یک محدودیت مربوط به صحت اطلاعات زمان بندی است. یک مشکل اساسی با پروفایل های قطعی که شامل دقت است وجود دارد. بارزترین محدودیت این است که "ساعت" زیرین فقط با نرخ (به طور معمول) حدود 001 ثانیه در حال تیک زدن است. از این رو هیچ اندازه گیری دقیق تر از ساعت زیرین نخواهد بود. اگر اندازه گیری های کافی انجام شود ، "خطا" تمایل به میانگین دارد. متأسفانه ، حذف این خطای اول باعث ایجاد منبع دوم خطای می شود.
مشکل دوم این است که "مدتی طول می کشد" از زمانی که یک رویداد اعزام می شود تا زمان تماس پروفایل برای رسیدن به زمان در واقع وضعیت ساعت را بدست آورد. به همین ترتیب ، هنگام خروج از کنترل کننده رویداد Profiler از زمانی که مقدار ساعت به دست آمده (و سپس سنجاب شده است) ، تاخیر خاصی وجود دارد ، تا زمانی که کد کاربر بار دیگر اجرا شود. در نتیجه ، کارکردهایی که بارها خوانده می شوند یا با بسیاری از توابع تماس می گیرند ، به طور معمول این خطا را جمع می کنند. خطایی که به این روش جمع می شود ، معمولاً کمتر از دقت ساعت است (کمتر از یک ساعت کنه) ، اما می تواند جمع شود و بسیار قابل توجه باشد.
مشکل با مشخصات مهمتر از CPROFILE پیشرو است. به همین دلیل ، پروفایل وسیله ای برای کالیبراسیون خود برای یک بستر معین فراهم می کند تا این خطا از نظر احتمالی (به طور متوسط) حذف شود. پس از کالیبراسیون پروفیلر ، دقیق تر خواهد شد (به معنای حداقل مربع) ، اما گاهی اوقات تعداد منفی ایجاد می کند (وقتی تعداد تماس ها فوق العاده کم است ، و خدایان احتمال علیه شما کار می کنند :-).) از اعداد منفی در نمایه نگران نباشید. آنها فقط باید در صورتی ظاهر شوند که پروفایل خود را کالیبره کرده اید ، و نتایج در واقع بهتر از بدون کالیبراسیون است.
تنظیم¶
پروفیلر ماژول پروفایل ثابت را از هر زمان رسیدگی به رویداد برای جبران سربار فراخوانی عملکرد زمان ، و از بین بردن نتایج ، کم می کند. به طور پیش فرض ، ثابت است 0. از روش زیر می توان برای به دست آوردن ثابت بهتر برای یک سکوی معین استفاده کرد (به محدودیت ها مراجعه کنید).
این روش تعداد تماس های پایتون را که توسط آرگومان ارائه شده است ، مستقیم و دوباره در زیر پروفایل انجام می دهد و زمان هر دو را اندازه گیری می کند. سپس در هر رویداد پروفایل ، سربار پنهان را محاسبه می کند و آن را به عنوان شناور باز می گرداند. به عنوان مثال ، در MACOS 1. 8 گیگاهرتزی Intel Core i5 و با استفاده از زمان Python. process_time () به عنوان تایمر ، شماره جادویی در حدود 4. 04E-6 است.
هدف این تمرین بدست آوردن یک نتیجه نسبتاً سازگار است. اگر رایانه شما بسیار سریع است ، یا عملکرد تایمر شما دارای وضوح ضعیفی است ، ممکن است برای به دست آوردن نتایج مداوم ، 100000 یا حتی 1000000 را پشت سر بگذارید.
هنگامی که پاسخ مداوم دارید ، سه روش وجود دارد که می توانید از آن استفاده کنید:
اگر انتخابی دارید ، بهتر است یک ثابت کوچکتر را انتخاب کنید ، و سپس نتایج شما "کمتر" در آمار مشخصات منفی ظاهر می شود.
با استفاده از یک تایمر سفارشی
اگر می خواهید نحوه تعیین زمان فعلی را تغییر دهید (به عنوان مثال ، برای استفاده از زمان کابین دیواری یا زمان فرآیند سپری شده) ، عملکرد زمان بندی مورد نظر خود را به سازنده کلاس پروفایل منتقل کنید:
سپس پروفایل حاصل با your_time_func تماس می گیرد. بسته به اینکه شما از پروفایل استفاده می کنید
your_time_func باید یک شماره واحد یا لیستی از اعداد را برگرداند که مبلغ آن زمان فعلی است (مانند آنچه OS. times () برمی گردد). اگر عملکرد یک شماره زمان واحد را برگرداند ، یا لیست شماره های برگشتی دارای طول 2 باشد ، در این صورت نسخه مخصوصی از روال اعزام دریافت خواهید کرد.
هشدار داده می شود که شما باید کلاس پروفایل را برای عملکرد تایمر که انتخاب می کنید کالیبراسیون کنید (به کالیبراسیون مراجعه کنید). برای اکثر دستگاه ها ، تایمر که یک عدد عدد صحیح تنها را برمی گرداند ، بهترین نتیجه را از نظر سربار کم در طول پروفایل ارائه می دهد.(os. times () بسیار بد است ، زیرا یک مقادیر نقطه شناور را برمی گرداند). اگر می خواهید یک تایمر بهتر را به صورت تمیز جایگزین کنید ، یک کلاس را به دست آورید و یک روش اعزام جایگزینی را که به بهترین وجه تماس با تایمر شما را انجام می دهد ، همراه با ثابت کالیبراسیون مناسب ، به دست آورید.
your_time_func باید یک شماره را برگرداند. اگر اعداد صحیح را برگرداند ، می توانید با یک آرگومان دوم که مدت زمان واقعی یک واحد زمان را مشخص می کند ، از سازنده کلاس نیز استفاده کنید. به عنوان مثال ، اگر your_integer_time_func زمان هایی که در هزاران ثانیه اندازه گیری می شود ، باز می گردد ، نمونه پروفایل را به شرح زیر می سازید:
از آنجا که کلاس cprofile. profile نمی تواند کالیبره شود ، از توابع تایمر سفارشی باید با احتیاط استفاده شود و باید به همان سرعت ممکن باشد. برای بهترین نتیجه با یک تایمر سفارشی ، ممکن است لازم باشد که آن را در منبع C ماژول داخلی _lsprof کدگذاری کنید.
Python 3. 3 چندین کارکرد جدید را در زمان اضافه می کند که می تواند برای اندازه گیری دقیق فرآیند یا زمان کابین دیواری استفاده شود. به عنوان مثال ، به Time. perf_counter () مراجعه کنید.
نرم افزار مفید تریدر...
ما را در سایت نرم افزار مفید تریدر دنبال می کنید
برچسب :
نویسنده : احمد شاملو
بازدید : 25
تاريخ : پنجشنبه
1 تير
1402 ساعت: 11:49