pstats --- آمار برای پروفایلگیرها¶
کد منبع: Lib/pstats.py
ماژول pstats ابزارهایی را برای خواندن، دستکاری و نمایش آمارهای پروفایلگیری تولیدشده توسط پروفایلگیرهای پایتون فراهم میکند. این ماژول خروجی هر دو ماژول profiling.tracing (پروفایلگیر قطعی) و profiling.sampling (پروفایلگیر آماری) را میخواند.
خواندن و نمایش دادههای پروفایل¶
کلاس Stats رابط اصلی برای کار با دادههای پروفایل است. این کلاس میتواند آمار را از پروندهها یا مستقیماً از یک شیء Profile بخواند.
بارگذاری آمار از یک پرونده و چاپ یک گزارش پایهای:
import pstats
p = pstats.Stats('profile_output.prof')
p.print_stats()
شیء Stats متدهایی را برای مرتبسازی و فیلتر کردن دادهها قبل از چاپ فراهم میکند. برای مثال، برای مشاهدهی ده تابع با بیشترین زمان انباشته:
from pstats import SortKey
p = pstats.Stats('profile_output.prof')
p.sort_stats(SortKey.CUMULATIVE).print_stats(10)
کار با آمار¶
کلاس Stats از زنجیرهسازی متدها پشتیبانی میکند و انجام چندین عملیات را به شکلی ساده فراهم میسازد:
p = pstats.Stats('restats')
p.strip_dirs().sort_stats(-1).print_stats()
متد strip_dirs() مسیرهای پوشه را از نام پروندهها حذف میکند و خروجی را فشردهتر میسازد. متد sort_stats() کلیدهای مختلفی را برای کنترل ترتیب مرتبسازی میپذیرد.
کلیدهای مرتبسازی مختلف، جنبههای متفاوتی از عملکرد را برجسته میکنند:
from pstats import SortKey
# توابعی که بیشترین زمان انباشته را مصرف میکنند
p.sort_stats(SortKey.CUMULATIVE).print_stats(10)
# توابعی که بیشترین زمان را در کد خودشان مصرف میکنند
p.sort_stats(SortKey.TIME).print_stats(10)
# توابع مرتبشده بر اساس نام
p.sort_stats(SortKey.NAME).print_stats()
فیلتر کردن خروجی¶
متد print_stats() محدودیتهایی را میپذیرد که مشخص میکنند چه توابعی نمایش داده شوند. محدودیتها میتوانند عدد صحیح (محدود کردن تعداد)، عدد اعشاری بین ۰ و ۱ (انتخاب یک درصد)، یا رشته (تطبیق نام توابع از طریق عبارت باقاعده) باشند.
چاپ فقط ۱۰ درصد برتر:
چاپ فقط توابعی که نام آنها شامل "init" است:
ترکیب محدودیتها (بهصورت پیاپی اعمال میشوند):
# Top 10%, then only those containing "init"
p.print_stats(.1, 'init')
# Functions in files matching "foo:", limited to top 50%
p.sort_stats(SortKey.FILENAME).print_stats('foo:', .5)
تحلیل روابط فراخوانی¶
متد print_callers() نشان میدهد که کدام تابعها هر تابع نمایشدادهشده را فراخوانی کردهاند:
متد print_callees() رابطهی متقابل را نشان میدهد و فهرست میکند که هر تابع نمایشدادهشده کدام تابعها را فراخوانی کرده است:
هر دو متد همان آرگومانهای محدودیت را میپذیرند که متد print_stats() میپذیرد.
ترکیب چند پروفایل¶
آمار حاصل از چندین اجرای پروفایلگیری را میتوان در یک شیء Stats واحد ترکیب کرد:
# Load multiple files at once
p = pstats.Stats('run1.prof', 'run2.prof', 'run3.prof')
# Or add files incrementally
p = pstats.Stats('run1.prof')
p.add('run2.prof')
p.add('run3.prof')
هنگامی که پروندهها ترکیب میشوند، آمار مربوط به توابع یکسان (پرونده، سطر و نام یکسان) انباشته میشوند و نمای تجمیعی از تمامی اجراهای پروفایلگیری ارائه میدهند.
کلاس Stats¶
-
class pstats.Stats(*filenames_or_profile, stream=sys.stdout)¶
ایجاد یک شیء آماری از دادههای پروفایل.
آرگومانها میتوانند نام پروندهها (رشتهها یا اشیای شبهمسیر) یا اشیای Profile باشند. اگر چندین منبع ارائه شود، آمار آنها با یکدیگر ترکیب میشود.
آرگومان stream مشخص میکند که خروجی متد print_stats() و متدهای مرتبط با آن در کجا نوشته شود. مقدار پیشفرض آن sys.stdout است.
قالب دادههای پروفایل مختص نسخهای از پایتون است که آن را ایجاد کرده است. هیچ تضمینی برای سازگاری بین نسخههای مختلف پایتون یا بین پروفایلگیرهای مختلف وجود ندارد.
-
strip_dirs()¶
حذف اطلاعات مسیر پیشرو از تمام نامپروندهها.
این متد شیء را در جای خود اصلاح میکند و آن را برای زنجیرهسازی متدها برمیگرداند. پس از حذف، آمار بهصورت دارای ترتیب تصادفی در نظر گرفته میشود.
اگر حذف باعث شود دو تابع غیرقابلتمایز شوند (نامپرونده، شماره سطر و نام تابع یکسان)، آمار آنها در یک درایهی واحد ترکیب میشود.
-
add(*filenames)¶
اضافه کردن دادههای پروفایلگیری از پروندههای اضافی.
پروندهها باید توسط همان نوع پروفایلگیر ایجاد شده باشند. آمارهای مربوط به توابع یکسان انباشته میشوند.
-
dump_stats(filename)¶
ذخیرهسازی آمارهای فعلی در یک پرونده.
اگر پرونده وجود نداشته باشد ایجاد میشود و اگر وجود داشته باشد، روی آن نوشته میشود. دادههای ذخیرهشده را میتوان با ایجاد یک شیء جدید از Stats بارگذاری کرد.
-
sort_stats(*keys)¶
مرتبسازی آمارها بر اساس معیارهای مشخصشده.
هر کلید میتواند یک رشته یا یکی از اعضای شمارشی SortKey باشد. هنگامی که چندین کلید ارائه میشود، کلیدهای بعدی تساویهای کلیدهای قبلی را میشکنند.
استفاده از اعضای شمارشی SortKey به دلیل فراهم کردن بررسی خطای بهتر، به رشتهها ترجیح داده میشود:
from pstats import SortKey
p.sort_stats(SortKey.CUMULATIVE)
کلیدهای مرتبسازی معتبر:
رشته |
Enum |
معنی |
'calls'
|
SortKey.CALLS
|
تعداد فراخوانیها |
'cumulative'
|
SortKey.CUMULATIVE
|
زمان تجمعی |
'cumtime'
|
ناموجود |
زمان تجمعی |
'file'
|
ناموجود |
نام پرونده |
'filename'
|
SortKey.FILENAME
|
نام پرونده |
'module'
|
ناموجود |
نام پرونده |
'ncalls'
|
ناموجود |
تعداد فراخوانیها |
'pcalls'
|
SortKey.PCALLS
|
تعداد فراخوانیهای اولیه |
'line'
|
SortKey.LINE
|
شمارهی سطر |
'name'
|
SortKey.NAME
|
نام تابع |
'nfl'
|
SortKey.NFL
|
نام/پرونده/سطر |
'stdname'
|
SortKey.STDNAME
|
نام استاندارد |
'time'
|
SortKey.TIME
|
زمان داخلی |
'tottime'
|
ناموجود |
زمان داخلی |
تمام مرتبسازیها روی آمار به ترتیب نزولی هستند (زمانبرترینها در ابتدا)، در حالی که مرتبسازیهای نام، پرونده و شمارهسطر صعودی (الفبایی) هستند.
تفاوت بین SortKey.NFL و SortKey.STDNAME در این است که NFL شمارهسطرها را به صورت عددی مرتب میکند، در حالی که STDNAME آنها را به عنوان رشته مرتب میکند. عبارت sort_stats(SortKey.NFL) معادل sort_stats(SortKey.NAME, SortKey.FILENAME, SortKey.LINE) است.
برای سازگاری عقبگرد، آرگومانهای عددی -1، 0، 1 و 2 نیز پذیرفته میشوند که به ترتیب به معنای 'stdname'، 'calls'، 'time' و 'cumulative' هستند.
اضافه شده در نسخهی 3.7: شمارشی (enum) از SortKey.
-
reverse_order()¶
معکوس کردن ترتیب مرتبسازی فعلی.
به طور پیشفرض، جهت مرتبسازی به صورت مناسب برای کلید مرتبسازی انتخاب میشود (نزولی برای کلیدهای مبتنی بر زمان، صعودی برای کلیدهای مبتنی بر نام). این متد آن انتخاب را معکوس میکند.
-
print_stats(*restrictions)¶
چاپ گزارشی از آمارهای پروفایلگیری.
خروجی شامل یک سطر سرآیند که دادهها را خلاصه میکند، به همراه جدول آمارهای توابع است که بر اساس آخرین فراخوانی sort_stats() مرتب شدهاند.
محدودیتها خروجی را فیلتر میکنند. هر محدودیت یکی از موارد زیر است:
یک عدد صحیح: خروجی را به آن تعداد مدخل محدود میکند
یک عدد اعشاری بین 0.0 و 1.0: آن کسری از مدخلها را انتخاب میکند
یک رشته: نام توابع را از طریق عبارت باقاعده مطابقت میدهد
محدودیتها به صورت ترتیبی اعمال میشوند. برای مثال:
ابتدا به ۱۰ درصد برتر محدود میکند، سپس روی توابعی که با 'foo:' مطابقت دارند فیلتر میکند.
-
print_callers(*restrictions)¶
چاپ کردن فراخوانندههای هر تابع در آمار.
برای هر تابع در نتایج فیلترشده، نشان میدهد که کدام توابع آن را فراخوانی کردهاند و چند بار.
با ماژول profiling.tracing (یا cProfile)، هر سطر فراخواننده سه عدد را نشان میدهد: تعداد فراخوانیها از آن فراخواننده، و زمانهای کل و تجمعی برای آن فراخوانیهای خاص.
همان آرگومانهای محدودکننده را مانند print_stats() میپذیرد.
-
print_callees(*restrictions)¶
چاپ کردن توابع فراخوانیشده توسط هر تابع در آمار.
این کار معکوس print_callers() است و نشان میدهد هر تابع فهرستشده چه توابعی را فراخوانی کرده است.
همان آرگومانهای محدودکننده را مانند print_stats() میپذیرد.
-
get_stats_profile()¶
یک شیء StatsProfile حاوی آمار را برمیگرداند.
شیء برگرداندهشده دسترسی برنامهنویسی به دادههای پروفایل را فراهم میکند، بهطوری که نام توابع به شیءهای FunctionProfile حاوی اطلاعات زمانبندی و تعداد فراخوانی نگاشت شدهاند.
-
class pstats.SortKey¶
شمارهگذاری کلیدهای مرتبسازی معتبر برای Stats.sort_stats().
-
CALLS¶
مرتبسازی بر اساس تعداد فراخوانی.
-
CUMULATIVE¶
مرتبسازی بر اساس زمان تجمعی.
-
FILENAME¶
مرتبسازی بر اساس نام پرونده.
-
LINE¶
مرتبسازی بر اساس شمارهی سطر.
-
NAME¶
مرتبسازی بر اساس نام تابع.
-
NFL¶
مرتبسازی بر اساس نام، سپس پرونده و سپس شمارهی سطر (مرتبسازی عددی سطر).
-
PCALLS¶
مرتبسازی بر اساس تعداد فراخوانی اولیه (غیربازگشتی).
-
STDNAME¶
مرتبسازی بر اساس نام استاندارد (مرتبسازی سطری مبتنی بر رشته).
-
TIME¶
مرتبسازی بر اساس زمان داخلی (زمان صرفشده در تابع به جز زیرفراخوانیها).
رابط خط فرمان¶
ماژول pstats را میتوان به عنوان یک اسکریپت برای مرور تعاملی دادههای پروفایل فراخوانی کرد:
python -m pstats profile_output.prof
این کار یک رابط خطمشیمحور (ساختهشده روی cmd) برای بررسی آمار باز میکند. برای دستورهای موجود، عبارت help را در اعلان وارد کنید.
©
حق نشر 2001 Python Software Foundation.
این صفحه تحت مجوز بنیاد نرمافزار پایتون نسخه ۲ منتشر شده است.
مثالها، دستورالعملها، و سایر کدهای موجود در مستندات همچنین تحت مجوز بدون بند BSD منتشر شدهاند.
برای اطلاعات بیشتر به
تاریخچه و مجوز مراجعه کنید.
بنیاد نرمافزار پایتون یک شرکت غیرانتفاعی است.
لطفاً کمک مالی کنید.
آخرین بهروزرسانی در نوامبر 12, 2026 (06:19 UTC).
آیا
اشکالی یافتید؟
ساخته شده با
Sphinx 9.1.0.