'\" t .\" Man page generated from reStructuredText .\" by the Docutils 0.22.3 manpage writer. . . .nr rst2man-indent-level 0 . .de1 rstReportMargin \\$1 \\n[an-margin] level \\n[rst2man-indent-level] level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] - \\n[rst2man-indent0] \\n[rst2man-indent1] \\n[rst2man-indent2] .. .de1 INDENT .\" .rstReportMargin pre: . RS \\$1 . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] . nr rst2man-indent-level +1 .\" .rstReportMargin post: .. .de UNINDENT . RE .\" indent \\n[an-margin] .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] .nr rst2man-indent-level -1 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. .TH "PYTHONPERFORMANCEBENCHMARKSUITE" "1" "Feb 08, 2026" "1.14.0" "Python Performance Benchmark Suite" .SH "نام (NAME)" pythonperformancebenchmarksuite \- مستندات مجموعه بنچمارک عملکرد پایتون .sp پروژهٔ \fBpyperformance\fP با این هدف طراحی شده است که مرجعی معتبر برای سنجش عملکرد (بنچمارک) تمامی پیاده‌سازی‌های Python باشد. تمرکز اصلی آن بر بنچمارک‌های دنیای واقعی به‌جای بنچمارک‌های ساختگی (synthetic) است و در صورت امکان از برنامه‌های کامل استفاده می‌کند. .INDENT 0.0 .IP \(bu 2 مستندات pyperformance \% .IP \(bu 2 پروژه GitHub نرم‌افزار pyperformance \% (کد منبع، گزارش مشکلات) .IP \(bu 2 بارگیری pyperformance از PyPI \% .UNINDENT .sp نرم‌افزار pyperformance تحت مجوز MIT توزیع می‌شود. .sp مستندات: .SH "نحوه استفاده (USAGE)" .SS "نصب (Installation)" .sp دستور نصب pyperformance: .INDENT 0.0 .INDENT 3.5 .sp .EX python3 \-m pip install pyperformance .EE .UNINDENT .UNINDENT .sp این دستور برنامهٔ جدید \fBpyperformance\fP را نصب می‌کند. .sp در صورت نیاز، وابستگی‌های \fBpyperf\fP و \fBsix\fP به‌طور خودکار نصب می‌شوند. .sp نرم‌افزار pyperformance بر روی Python 3.6 و نسخه‌های جدیدتر اجرا می‌شود، اما ممکن است بر روی Python 3.4 و 3.5 نیز کار کند. .sp در زمان اجرا، ممکن است فایل‌های توسعهٔ Python (فایل‌های هدر) برای نصب برخی وابستگی‌ها مانند \fBdulwich_log\fP یا \fBpsutil\fP به‌منظور کامپایل افزونه‌های C آن‌ها نیاز باشد. دستورهای نصب این وابستگی‌ها در Fedora: .INDENT 0.0 .IP \(bu 2 پایتون ۳: \fBsudo dnf install python3\-devel\fP .IP \(bu 2 PyPy: \fBsudo dnf install pypy\-devel\fP .UNINDENT.SS نکات مربوط به Windows .sp در Windows، برای اینکه pyperformance بتواند وابستگی‌هایی مانند \fBgreenlet\fP، \fBdulwich\fP یا \fBpsutil\fP را از سورس بسازد، چنانچه می‌خواهید از یک \fBpython.exe\fP کامپایل‌شده از سورس استفاده کنید، نباید مستقیماً از آن \fBpython.exe\fP استفاده نمایید. در عوض، باید دستور کم‌تر شناخته‌شده‌ی \fBPC\elayout\fP را اجرا کنید تا ساختاری در سیستم‌فایل ایجاد شود که شبیه به یک Python نصب‌شده باشد: .INDENT 0.0 .INDENT 3.5 .sp .EX \&.\epython.bat \-m PC.layout \-\-preset\-default \-\-copy installed \-v .EE .UNINDENT .UNINDENT .sp (برای اطلاعات بیشتر در مورد \fBPC\elayout\fP\&، از گزینه‌ی \fB\-\-help\fP استفاده کنید.) .sp اکنون می‌توانید از فایل اجرایی Python \(dqنصب‌شده\(dq استفاده کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX installed\epython.exe \-m pip install pyperformance installed\epython.exe \-m pyperformance run ... .EE .UNINDENT .UNINDENT .sp استفاده از یک فایل اجرایی Python که \fIواقعاً\fP نصب شده باشد (مثلاً از طریق \fBpy\fP) نیز به خوبی کار می‌کند. .SS اجرای بنچمارک‌ها .sp دستورهایی برای مقایسه‌ی کارایی Python 3.6 و Python 3.7: .INDENT 0.0 .INDENT 3.5 .sp .EX pyperformance run \-\-python=python3.6 \-o py36.json pyperformance run \-\-python=python3.7 \-o py37.json pyperformance compare py36.json py37.json .EE .UNINDENT .UNINDENT .sp نکته: ساختار \fBpython3 \-m pyperformance ...\fP نیز کار می‌کند (مثال: \fBpython3 \-m pyperformance run \-o py37.json\fP)، اما مستلزم نصب pyperformance روی هر یک از نسخه‌های آزمایش‌شده‌ی Python است. .sp فایل‌های JSON توسط ماژول pyperf تولید می‌شوند و بنابراین می‌توان آن‌ها را با استفاده از دستورهای pyperf تحلیل کرد: .INDENT 0.0 .INDENT 3.5 .sp .EX python3 \-m pyperf show py36.json python3 \-m pyperf check py36.json python3 \-m pyperf metadata py36.json python3 \-m pyperf stats py36.json python3 \-m pyperf hist py36.json python3 \-m pyperf dump py36.json (...) .EE .UNINDENT .UNINDENT .sp همچنین امکان استفاده از pyperf برای مقایسه‌ی نتایج دو فایل JSON وجود دارد: .INDENT 0.0 .INDENT 3.5 .sp .EX python3 \-m pyperf compare_to py36.json py37.json \-\-table .EE .UNINDENT .UNINDENT .SS دستورهای پایه .sp عملیات‌های pyperformance: .INDENT 0.0 .INDENT 3.5 .sp .EX run اجرای بنچمارک‌ها روی پایتون در حال اجرا show نمایش یک فایل بنچمارک compare مقایسه دو فایل بنچمارک list فهرست کردن بنچمارک‌های پایتون در حال اجرا list_groups فهرست کردن گروه‌های بنچمارک پایتون در حال اجرا venv عملیات روی محیط مجازی .EE .UNINDENT .UNINDENT.SS گزینه‌های عمومی .sp گزینه‌های موجود برای همهٔ دستورها: .INDENT 0.0 .INDENT 3.5 .sp .EX \-h, \-\-help نمایش این پیام راهنما و خروج .EE .UNINDENT .UNINDENT .SS run .sp اجرای بنچمارک‌ها روی python در حال اجرا. .sp کاربرد: .INDENT 0.0 .INDENT 3.5 .sp .EX pyperformance run [\-h] [\-r] [\-f] [\-\-debug\-single\-value] [\-v] [\-m] [\-\-affinity CPU_LIST] [\-o FILENAME] [\-\-append FILENAME] [\-\-manifest MANIFEST] [\-\-timeout TIMEOUT] [\-b BM_LIST] [\-\-inherit\-environ VAR_LIST] [\-p PYTHON] [\-\-hook HOOK] .EE .UNINDENT .UNINDENT .sp گزینه‌ها: .INDENT 0.0 .INDENT 3.5 .sp .EX \-h, \-\-help نمایش این پیام راهنما و خروج \-r, \-\-rigorous صرف زمان بیشتر برای اجرای آزمون‌ها جهت دریافت نتایج دقیق‌تر \-f, \-\-fast دریافت سریع نتایج تقریبی \-\-debug\-single\-value اشکال‌زدایی: سریع‌ترین حالت، تنها محاسبه یک مقدار واحد \-v, \-\-verbose چاپ خروجی بیشتر \-m, \-\-track\-memory ردیابی مصرف حافظه. این قابلیت فقط در Linux کار می‌کند. \-\-affinity CPU_LIST تعیین CPU affinity برای اجراهای بنچمارک. به این ترتیب، می‌توان بنچمارک‌ها را مجبور به اجرا روی یک CPU مشخص کرد تا تغییرات بین اجراها به حداقل برسد. \-o FILENAME, \-\-output FILENAME اجرای بنچمارک‌ها تنها روی یک مفسر و نوشتن نتایج در FILENAME. فقط baseline_python را مشخص کنید، نه changed_python. \-\-append FILENAME افزودن اجراها به یک فایل موجود، یا ایجاد آن اگر وجود نداشته باشد \-\-timeout TIMEOUT تعیین مهلت زمانی به ثانیه برای یک بار اجرای بنچمارک (پیش‌فرض: غیرفعال) \-\-manifest MANIFEST فایل مانیفست بنچمارک برای استفاده \-b BM_LIST, \-\-benchmarks BM_LIST فهرست جداشده با کاما از بنچمارک‌ها برای اجرا. می‌تواند شامل آرگومان‌های مثبت و منفی باشد: \-\-benchmarks=run_this,also_this,\-not_this. اگر هیچ آرگومان مثبتی نباشد، تمام بنچمارک‌ها به‌جز آرگومان‌های منفی اجرا می‌شوند؛ در غیر این صورت فقط آرگومان‌های مثبت اجرا خواهند شد. \-\-inherit\-environ VAR_LIST فهرست جداشده با کاما از متغیرهای محیطی که هنگام اجرای زیرپردازش‌های بنچمارک، از محیط والد به ارث برده می‌شوند. \-p PYTHON, \-\-python PYTHON فایل اجرایی Python (پیش‌فرض: استفاده از Python در حال اجرا) \-\-same\-loops SAME_LOOPS استفاده از همان تعداد تکرار اجرای پیشین (یعنی کالیبراسیون مجدد نشود). باید مسیر یک فایل .json از اجرای قبلی باشد. \-\-hook HOOK اعمال hook مشخص‌شده از pyperf هنگام اجرای بنچمارک‌ها. .EE .UNINDENT .UNINDENT.SS show .sp نمایش یک فایل بنچمارک. .sp کاربرد: .INDENT 0.0 .INDENT 3.5 .sp .EX show FILENAME .EE .UNINDENT .UNINDENT .sp آرگومان‌های موضعی: .INDENT 0.0 .INDENT 3.5 .sp .EX FILENAME .EE .UNINDENT .UNINDENT .SS compare .sp مقایسه دو فایل بنچمارک. .sp کاربرد: .INDENT 0.0 .INDENT 3.5 .sp .EX pyperformance compare [\-h] [\-v] [\-O STYLE] [\-\-csv CSV_FILE] [\-\-inherit\-environ VAR_LIST] [\-p PYTHON] baseline_file.json changed_file.json .EE .UNINDENT .UNINDENT .sp آرگومان‌های موضعی: .INDENT 0.0 .INDENT 3.5 .sp .EX baseline_file.json changed_file.json .EE .UNINDENT .UNINDENT .sp گزینه‌ها: .INDENT 0.0 .INDENT 3.5 .sp .EX \-v, \-\-verbose چاپ خروجی بیشتر \-O STYLE, \-\-output_style STYLE سبکی که خروجی بنچمارک باید به خود بگیرد. گزینه‌های معتبر \(aqnormal\(aq و \(aqtable\(aq هستند. پیش‌فرض normal است. \-\-csv CSV_FILE نام فایلی که نتایج در آن نوشته خواهد شد، به صورت یک فایل CSV سه‌ستونه شامل کمترین زمان‌های اجرا برای هر بنچمارک. \-\-inherit\-environ VAR_LIST فهرست جداشده با کاما از نام‌های متغیرهای محیطی که هنگام اجرای زیرفرآیندهای بنچمارک از محیط والد به ارث برده می‌شوند. \-p PYTHON, \-\-python PYTHON فایل اجرایی پایتون (پیش‌فرض: استفاده از پایتون در حال اجرا) .EE .UNINDENT .UNINDENT .SS list .sp فهرست‌کردن بنچمارک‌های پایتونِ در حال اجرا. .sp کاربرد: .INDENT 0.0 .INDENT 3.5 .sp .EX pyperformance list [\-h] [\-\-manifest MANIFEST] [\-b BM_LIST] [\-\-inherit\-environ VAR_LIST] [\-p PYTHON] .EE .UNINDENT .UNINDENT .sp گزینه‌ها: .INDENT 0.0 .INDENT 3.5 .sp .EX \-\-manifest MANIFEST فایل مانیفست بنچمارک برای استفاده \-b BM_LIST, \-\-benchmarks BM_LIST فهرست جداشده با کاما از بنچمارک‌ها برای اجرا. می‌تواند شامل هر دو آرگومان مثبت و منفی باشد: \-\-benchmarks=run_this,also_this,\-not_this. اگر هیچ آرگومان مثبتی نباشد، تمام بنچمارک‌ها به‌جز آرگومان‌های منفی اجرا می‌شوند. در غیر این صورت فقط آرگومان‌های مثبت اجرا می‌شوند. \-\-inherit\-environ VAR_LIST فهرست جداشده با کاما از نام متغیرهای محیطی که هنگام اجرای زیرفرآیندهای بنچمارک از محیط والد به ارث برده می‌شوند. \-p PYTHON, \-\-python PYTHON فایل اجرایی پایتون (پیش‌فرض: استفاده از پایتون در حال اجرا) .EE .UNINDENT .UNINDENT .sp برای فهرست‌کردن تمام بنچمارک‌ها از \fBpython3 \-m pyperformance list \-b all\fP استفاده کنید..SS list_groups .sp فهرست گروه‌های بنچمارک Python در حال اجرا. .sp کاربرد: .INDENT 0.0 .INDENT 3.5 .sp .EX pyperformance list_groups [\-h] [\-\-manifest MANIFEST] [\-\-inherit\-environ VAR_LIST] [\-p PYTHON] .EE .UNINDENT .UNINDENT .sp گزینه‌ها: .INDENT 0.0 .INDENT 3.5 .sp .EX \-\-manifest MANIFEST فایل مانیفست بنچمارک برای استفاده \-\-inherit\-environ VAR_LIST فهرست جداشده با کاما از نام‌های متغیرهای محیطی که هنگام اجرای زیرپردازش‌های بنچمارک از محیط والد به ارث برده می‌شوند. \-p PYTHON, \-\-python PYTHON فایل اجرایی Python (پیش‌فرض: استفاده از Python در حال اجرا) .EE .UNINDENT .UNINDENT .SS venv .sp عملیات روی محیط مجازی. .sp عملیات‌ها: .INDENT 0.0 .INDENT 3.5 .sp .EX show نمایش مسیر محیط مجازی و وضعیت آن (ایجاد شده یا خیر) create ایجاد محیط مجازی recreate اجبار به ایجاد مجدد محیط مجازی remove حذف محیط مجازی .EE .UNINDENT .UNINDENT .sp گزینه‌های عمومی: .INDENT 0.0 .INDENT 3.5 .sp .EX \-\-venv VENV مسیر محیط مجازی \-\-inherit\-environ VAR_LIST فهرست جداشده با کاما از نام‌های متغیرهای محیطی که هنگام اجرای زیرپردازش‌های بنچمارک از محیط والد به ارث برده می‌شوند. \-p PYTHON, \-\-python PYTHON فایل اجرایی Python (پیش‌فرض: استفاده از Python در حال اجرا) .EE .UNINDENT .UNINDENT .SS venv show .sp نمایش مسیر محیط مجازی و وضعیت آن (ایجاد شده یا خیر). .sp کاربرد: .INDENT 0.0 .INDENT 3.5 .sp .EX pyperformance venv show [\-h] [\-\-venv VENV] [\-\-inherit\-environ VAR_LIST] [\-p PYTHON] .EE .UNINDENT .UNINDENT.SS venv create .sp ایجاد محیط مجازی. .sp کاربرد: .INDENT 0.0 .INDENT 3.5 .sp .EX pyperformance venv create [\-h] [\-\-venv VENV] [\-\-manifest MANIFEST] [\-b BM_LIST] [\-\-inherit\-environ VAR_LIST] [\-p PYTHON] .EE .UNINDENT .UNINDENT .sp گزینه‌ها: .INDENT 0.0 .INDENT 3.5 .sp .EX \-\-manifest MANIFEST فایل مانیفست محک مورد استفاده \-b BM_LIST, \-\-benchmarks BM_LIST فهرست محک‌های جداشده با کاما برای اجرا. می‌تواند شامل هر دو آرگومان مثبت و منفی باشد: \-\-benchmarks=run_this,also_this,\-not_this. اگر هیچ آرگومان مثبتی نباشد، تمام محک‌ها به‌جز آرگومان‌های منفی اجرا خواهند شد. در غیر این صورت تنها آرگومان‌های مثبت اجرا می‌شوند. .EE .UNINDENT .UNINDENT .SS venv recreate .sp ایجاد مجدد اجباری محیط مجازی. .sp کاربرد: .INDENT 0.0 .INDENT 3.5 .sp .EX pyperformance venv recreate [\-h] [\-\-venv VENV] [\-\-manifest MANIFEST] [\-b BM_LIST] [\-\-inherit\-environ VAR_LIST] [\-p PYTHON] .EE .UNINDENT .UNINDENT .sp گزینه‌ها: .INDENT 0.0 .INDENT 3.5 .sp .EX \-\-manifest MANIFEST فایل مانیفست محک مورد استفاده \-b BM_LIST, \-\-benchmarks BM_LIST فهرست محک‌های جداشده با کاما برای اجرا. می‌تواند شامل هر دو آرگومان مثبت و منفی باشد: \-\-benchmarks=run_this,also_this,\-not_this. اگر هیچ آرگومان مثبتی نباشد، تمام محک‌ها به‌جز آرگومان‌های منفی اجرا خواهند شد. در غیر این صورت تنها آرگومان‌های مثبت اجرا می‌شوند. .EE .UNINDENT .UNINDENT .SS venv remove .sp حذف محیط مجازی. .sp کاربرد: .INDENT 0.0 .INDENT 3.5 .sp .EX pyperformance venv remove [\-h] [\-\-venv VENV] [\-\-inherit\-environ VAR_LIST] [\-p PYTHON] .EE .UNINDENT .UNINDENT.SS کامپایل پایتون برای اجرای محک‌ها .sp عملیات‌های pyperformance: .INDENT 0.0 .INDENT 3.5 .sp .EX compile کامپایل و نصب CPython و اجرای محک‌ها روی پایتونِ نصب‌شده compile_all کامپایل و نصب CPython و اجرای محک‌ها روی پایتونِ نصب‌شده در تمام شاخه‌ها و بازبینی‌های CONFIG_FILE upload بارگذاری نتایج JSON در وب‌سایت Codespeed .EE .UNINDENT .UNINDENT .sp تمام این دستورها به یک فایل پیکربندی نیاز دارند. .sp پیکربندی ساده قابل استفاده برای \fBcompile\fP (اما نه برای \fBcompile_all\fP و نه \fBupload\fP)، \fBdoc/benchmark.conf\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX [config] json_dir = ~/prog/python/bench_json [scm] repo_dir = ~/prog/python/master update = True [compile] bench_dir = ~/prog/python/bench_tmpdir [run_benchmark] system_tune = True affinity = 2,3 .EE .UNINDENT .UNINDENT .sp نمونه فایل پیکربندی به همراه توضیحات، \fBdoc/benchmark.conf.sample\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX [config] # دایرکتوری‌ای که فایل‌های JSON در آن نوشته می‌شوند. # \- فایل‌های بارگذاری‌شده به json_dir/uploaded/ منتقل می‌شوند # \- نتایج پایتون وصله‌شده در json_dir/patch/ نوشته می‌شوند json_dir = ~/json # اگر True باشد، CPython در حالت اشکال‌زدایی کامپایل می‌شود (LTO و PGO غیرفعال می‌شوند)، # محک‌ها با \-\-debug\-single\-sample اجرا می‌شوند و بارگذاری غیرفعال می‌گردد. # # از این گزینه برای بررسی سریع یک پیکربندی استفاده کنید. debug = False [scm] # دایرکتوری کد منبع CPython (مخزن Git) repo_dir = ~/cpython # مخزن Git به‌روزرسانی شود (git fetch)؟ update = True # نام ریموت Git، برای ایجاد بازبینیِ # شاخهٔ Git استفاده می‌شود. به عنوان مثال، از بازبینی \(aqremotes/origin/3.6\(aq # برای شاخهٔ \(aq3.6\(aq استفاده کنید. git_remote = remotes/origin [compile] # ایجاد فایل‌ها در bench_dir: # \- bench_dir/bench\-xxx.log # \- bench_dir/prefix/: جایی که پایتون در آن نصب می‌شود # \- bench_dir/venv/: محیط مجازی استفاده‌شده توسط pyperformance bench_dir = ~/bench_tmpdir # بهینه‌سازی زمان پیوند (LTO)؟ lto = True # بهینه‌سازی هدایت‌شده با پروفایل (PGO)؟ pgo = True # کامپایلر آزمایشی درجا (JIT) ساخته شود؟ # مقادیر ممکن عبارتند از: # \- no: (پیش‌فرض) کامپایلر JIT یا مفسر micro\-op ساخته نشود. # متغیر محیطی جدید PYTHON_JIT تأثیری ندارد. # \- yes: کامپایلر JIT ساخته شده و به‌طور پیش‌فرض فعال شود. از PYTHON_JIT=0 می‌توان # برای غیرفعال کردن آن در زمان اجرا استفاده کرد. # \- yes\-off: کامپایلر JIT ساخته شود، اما به‌طور پیش‌فرض فعال نشود. از PYTHON_JIT=1 می‌توان # برای فعال کردن آن در زمان اجرا استفاده کرد. # \- interpreter: کامپایلر JIT ساخته نشود، اما مفسر micro\-op ساخته و فعال شود. # این برای کسانی مفید است که در حال توسعه یا اشکال‌زدایی micro\-opها هستند # (اما نمی‌خواهند با JIT سر و کله بزنند). # از PYTHON_JIT=0 می‌توان برای غیرفعال کردن مفسر micro\-op در زمان اجرا استفاده کرد. jit = no # فهرستی از کتابخانه‌های جداشده با فاصله که package\-only هستند، # یعنی به‌صورت محلی نصب شده‌اند اما در مسیرهای هدر و کتابخانه قرار ندارند. # برای هر یک از این کتابخانه‌ها، مسیر نصب تعیین شده و یک زیرمسیر مناسب # به اعلان‌های CFLAGS و LDFLAGS که به configure ارسال می‌شوند افزوده می‌شود. # به عنوان یک استثنا، پیشوند openssl، در صورت وجود این کتابخانه در اینجا، # از طریق گزینهٔ \-\-with\-openssl ارسال می‌شود. در حال حاضر، این قابلیت # فقط با Homebrew روی macOS کار می‌کند. # در صورت اجرا روی macOS با Homebrew، احتمالاً مایلید از این استفاده کنید: # pkg_only = openssl readline sqlite3 xz zlib # نسخهٔ zlib ارائه‌شده به همراه macOS نیز احتمالاً کار می‌کند، # تا زمانی که هدرهای SDK اپل نصب شده باشند. pkg_only = # پایتون نصب شود؟ اگر false باشد، پایتون از دایرکتوری ساخت اجرا می‌شود # # هشدار: اجرای پایتون از دایرکتوری ساخت تغییرات ظریفی نسبت به اجرای # یک پایتونِ نصب‌شده ایجاد می‌کند. علاوه بر این، ایجاد یک محیط مجازی با استفاده # از پایتون اجراشده از دایرکتوری ساخت در موارد بسیاری با شکست مواجه می‌شود، # به‌ویژه در پایتون‌های قدیمی‌تر از 3.4. نصب را فقط در صورتی غیرفعال کنید # که واقعاً بدانید چه کاری انجام می‌دهید! install = True # پارامتر \(aq\-j\(aq در دستور \(aqmake\(aq مشخص شود jobs = 8 [run_benchmark] # دستور \(dqsudo python3 \-m pyperf system tune\(dq پیش از اجرای محک‌ها اجرا شود؟ system_tune = True # گزینهٔ \-\-manifest برای \(aqpyperformance run\(aq manifest = # گزینهٔ \-\-benchmarks برای \(aqpyperformance run\(aq benchmarks = # گزینهٔ \-\-affinity برای \(aqpyperf system tune\(aq و \(aqpyperformance run\(aq affinity = # فایل JSON تولیدشده بارگذاری شود؟ # # بارگذاری در پایتون وصله‌شده، در حالت اشکال‌زدایی یا در صورت غیرفعال # بودن install غیرفعال است. upload = False # گزینهٔ \-\-rigorous برای \(aqpyperformance run\(aq rigorous = False # پیکربندی برای بارگذاری نتایج در یک وب‌سایت Codespeed [upload] url = environment = executable = project = [compile_all] # فهرست شاخه‌های Git مربوط به CPython branches = default 3.6 3.5 2.7 # فهرست بازبینی‌ها برای سنجش با compile_all [compile_all_revisions] # فهرستی از \(aqsha1=\(aq (شاخهٔ پیش‌فرض: \(aqmaster\(aq) یا \(aqsha1=branch\(aq # استفاده‌شده توسط دستور \(dqpyperformance compile_all\(dq # مثلاً: 11159d2c9d6616497ef4cc62953a5c3cc8454afb = .EE .UNINDENT .UNINDENT.SS compile .sp کامپایل Python، نصب Python و اجرای محک‌ها روی Python نصب‌شده. .sp کاربرد: .INDENT 0.0 .INDENT 3.5 .sp .EX pyperformance compile [\-h] [\-\-patch PATCH] [\-U] [\-T] [\-\-inherit\-environ VAR_LIST] [\-p PYTHON] config_file revision [branch] .EE .UNINDENT .UNINDENT .sp آرگومان‌های موضعی: .INDENT 0.0 .INDENT 3.5 .sp .EX config_file نام فایل پیکربندی revision بازبینی محک‌زده‌شده Python branch شاخه Git .EE .UNINDENT .UNINDENT .sp گزینه‌ها: .INDENT 0.0 .INDENT 3.5 .sp .EX \-\-patch PATCH فایل وصله \-U, \-\-no\-update مخزن Git به‌روزرسانی نشود \-T, \-\-no\-tune دستور \(aqpyperf system tune\(aq برای تنظیم سیستم جهت اجرای محک‌ها اجرا نشود \-\-inherit\-environ VAR_LIST فهرست جداشده با کاما از نام‌های متغیرهای محیطی که هنگام اجرای زیرپردازش‌های محک‌زنی از محیط والد به ارث برده می‌شوند. \-p PYTHON, \-\-python PYTHON فایل اجرایی Python (پیش‌فرض: استفاده از Python در حال اجرا) .EE .UNINDENT .UNINDENT .sp نکات: .INDENT 0.0 .IP \(bu 2 قابلیت PGO در Ubuntu 14.04 LTS با GCC 4.8.4\-2ubuntu1~14.04 کار نمی‌کند: \fBModules/socketmodule.c:7743:1: internal compiler error: in edge_badness, at ipa\-inline.c:895\fP .UNINDENT .SS compile_all .sp کامپایل تمام شاخه‌ها و بازبینی‌های CONFIG_FILE. .sp کاربرد: .INDENT 0.0 .INDENT 3.5 .sp .EX pyperformance compile_all [\-h] [\-\-inherit\-environ VAR_LIST] [\-p PYTHON] config_file .EE .UNINDENT .UNINDENT .sp آرگومان‌های موضعی: .INDENT 0.0 .INDENT 3.5 .sp .EX config_file نام فایل پیکربندی .EE .UNINDENT .UNINDENT .sp گزینه‌ها: .INDENT 0.0 .INDENT 3.5 .sp .EX \-\-inherit\-environ VAR_LIST فهرست جداشده با کاما از نام‌های متغیرهای محیطی که هنگام اجرای زیرپردازش‌های محک‌زنی از محیط والد به ارث برده می‌شوند. \-p PYTHON, \-\-python PYTHON فایل اجرایی Python (پیش‌فرض: استفاده از Python در حال اجرا) .EE .UNINDENT .UNINDENT.SS upload .sp بارگذاری نتایج از یک فایل JSON در وب‌سایت Codespeed. .sp کاربرد: .INDENT 0.0 .INDENT 3.5 .sp .EX pyperformance upload [\-h] [\-\-inherit\-environ VAR_LIST] [\-p PYTHON] config_file json_file .EE .UNINDENT .UNINDENT .sp آرگومان‌های مکانی: .INDENT 0.0 .INDENT 3.5 .sp .EX config_file نام فایل پیکربندی json_file نام فایل JSON .EE .UNINDENT .UNINDENT .sp گزینه‌ها: .INDENT 0.0 .INDENT 3.5 .sp .EX \-\-inherit\-environ VAR_LIST فهرست جداشده با کاما از نام‌های متغیرهای محیطی که هنگام اجرای زیرپردازش‌های محک‌زنی از محیط والد به ارث برده می‌شوند. \-p PYTHON, \-\-python PYTHON فایل اجرایی Python (پیش‌فرض: استفاده از Python در حال اجرا) .EE .UNINDENT .UNINDENT .SS چگونگی دستیابی به محک‌های پایدار .INDENT 0.0 .IP \(bu 2 اجرای دستور \fBpython3 \-m pyperf system tune\fP .IP \(bu 2 کامپایل Python با استفاده از LTO (بهینه‌سازی زمان پیوند) و PGO (بهینه‌سازی‌های هدایت‌شده با پروفایل): از دستور pyperformance compile استفاده کنید که به‌طور پیش‌فرض از LTO و PGO بهره می‌برد .IP \(bu 2 مشاهده توصیه‌های مستندات pyperf: چگونگی دستیابی به نتایج بازتولیدپذیر محک‌زنی \%\&. .UNINDENT .SS محیط مجازی pyperformance .sp برای اجرای محک‌ها، pyperformance ابتدا یک محیط مجازی ایجاد می‌کند. این ابزار پیش‌نیازها را با نسخه‌های مشخص نصب می‌کند تا محیطی بازتولیدپذیر فراهم شود. Python سیستمی ممکن است ماژول‌های ناشناخته‌ای با نسخه‌های نامشخص داشته باشد و همچنین ممکن است فایل‌های \fB\&.pth\fP داشته باشد که هنگام راه‌اندازی Python اجرا می‌شوند و می‌توانند رفتار Python را تغییر دهند یا دست‌کم راه‌اندازی آن را کُند کنند. .SS هدف pyperformance چیست .sp یک محک همیشه برای هدفی مشخص نوشته می‌شود. بسته به این‌که محک چگونه نوشته شده و چگونه اجرا شود، نتیجه می‌تواند متفاوت باشد و در نتیجه مفهوم متفاوتی داشته باشد. .sp مجموعه محک‌های pyperformance چندین هدف را دنبال می‌کند: .INDENT 0.0 .IP \(bu 2 کمک به شناسایی افت کارایی در یک پیاده‌سازی Python .IP \(bu 2 اعتبارسنجی اینکه یک تغییر بهینه‌سازی باعث سریع‌تر شدن Python شده و افت کارایی ایجاد نکرده، یا تنها افت‌های جزئی داشته است .IP \(bu 2 مقایسه دو پیاده‌سازی از Python، برای نمونه CPython و PyPy .IP \(bu 2 نمایشی از کارایی Python که در حالت ایده‌آل معرف کارایی برنامه‌های کاربردی در حال اجرا در محیط عملیاتی باشد .UNINDENT.SS عدم غیرفعال‌سازی GC و ASLR .sp ماژول pyperf و بنچمارک‌های pyperformance برای تولید نتایج تکرارپذیر طراحی شده‌اند، اما نه به قیمت اجرای بنچمارک‌ها در وضعیتی خاص که برای اجرای برنامه‌ها در محیط عملیاتی استفاده نمی‌شود. به همین دلایل، زباله‌روب پایتون (Python garbage collector)، تابع هش تصادفی پایتون و ASLR (تصادفی‌سازی چیدمان فضای آدرس) سیستم \fBغیرفعال نمی‌شوند\fP\&. بنچمارک‌ها همچنین \fBgc.collect()\fP را فراخوانی نمی‌کنند، چرا که CPython آن را با مکانیزم توقف کامل (stop\-the\-world) پیاده‌سازی می‌کند \% و بدین ترتیب برنامه‌ها برای جلوگیری از افت شدید کارایی آن را فراخوانی نمی‌کنند. .SS لحاظ کردن داده‌های پرت و جهش‌ها .sp علاوه بر این، در حالی که مستندات pyperf نحوه کاهش نویز تصادفی سیستم و سایر برنامه‌ها را توضیح می‌دهد، برخی از بنچمارک‌ها از سیستم استفاده می‌کنند و بنابراین بسته به بار کاری سیستم، کارایی I/O و غیره می‌توانند زمان‌بندی‌های متفاوتی داشته باشند. داده‌های پرت و جهش‌های موقت در نتایج به‌طور \fBخودکار حذف نمی‌شوند\fP: مقادیر به جای استفاده از میانه و انحراف مطلق میانه که داده‌های پرت را نادیده می‌گیرند، با محاسبه میانگین (میانگین حسابی) و انحراف معیار که این جهش‌ها را \(dqشامل می‌شود\(dq خلاصه می‌گردند. این یک انتخاب آگاهانه است، زیرا برنامه‌های در حال اجرا در محیط عملیاتی تحت تأثیر چنین کندی‌های موقتی ناشی از عوامل مختلفی مانند زباله‌روبی یا کامپایل JIT قرار می‌گیرند. .SS گرم‌کردن و وضعیت پایدار .sp یک موضوع بینابینی، \(dqگرم‌کردن\(dq (warmups) بنچمارک‌ها است. مقادیر اولیه هر فرایند کارگر (worker process) همواره کندتر هستند: در بهترین حالت 10% کندتر، و در PyPy می‌تواند 1000% یا بیشتر کندتر باشد. در حال حاضر (2017\-04\-14)، pyperformance مقادیر اولیه‌ای را که گرم‌کردن در نظر گرفته می‌شوند نادیده می‌گیرد تا زمانی که بنچمارک به \(dqوضعیت پایدار\(dq (steady state) خود برسد. این \(dqوضعیت پایدار\(dq می‌تواند شامل جهش‌های موقت به ازای هر 5 مقدار باشد (برای نمونه: ناشی از زباله‌روب)، و همچنان می‌تواند بهینه‌سازی‌های بیشتری از کامپایلر JIT را به دنبال داشته باشد اما با تأثیری \(dqاندک\(dq بر میانگین pyperformance. .sp جهت شفافیت، \(dqگرم‌کردن\(dq و \(dqوضعیت پایدار\(dq موضوعاتی در حال توسعه و مباحثی بسیار پیچیده هستند، به‌ویژه در PyPy و کامپایلر JIT آن. .SS نکات .sp ابزاری برای مقایسه کارایی دو پیاده‌سازی پایتون. .sp دستور pyperformance آزمون تی دو دامنه‌ای استیودنت (Student\(aqs two\-tailed T test) را با سطح اطمینان 95% روی نتایج بنچمارک اجرا می‌کند تا نشان دهد که آیا اختلاف مشاهده‌شده از نظر آماری معنادار است یا خیر. .sp حذف گزینه \fB\-b\fP منجر به اجرای گروه پیش‌فرض بنچمارک‌ها می‌شود؛ حذف \fB\-b\fP همانند مشخص کردن \fI\-b default\fP است\&. .sp برای اجرای تمام بنچمارک‌هایی که pyperformance می‌شناسد، از \fB\-b all\fP استفاده کنید\&. برای مشاهده فهرست کامل همه بنچمارک‌های موجود، از \fI\-\-help\fP استفاده کنید\&. .sp مشخص کردن منفی بنچمارک‌ها نیز پشتیبانی می‌شود: \fI\-b \-2to3\fP همه بنچمارک‌های گروه پیش‌فرض را به جز 2to3 اجرا خواهد کرد (این کار مشابه \fI\-b default,\-2to3\fP است). گزینه \fI\-b all,\-django\fP همه بنچمارک‌ها به جز بنچمارک الگوهای Django را اجرا می‌کند. گروه‌های منفی (مانند \fI\-b \-default\fP) پشتیبانی نمی‌شوند. بنچمارک‌های مثبت پیش از کسر بنچمارک‌های منفی تجزیه می‌شوند. .sp اگر گزینه \fB\-\-track_memory\fP داده شود، pyperformance به‌طور مداوم مصرف حافظه بنچمارک را نمونه‌برداری می‌کند. این ویژگی در حال حاضر فقط روی لینوکس 2.6.16 و بالاتر، یا ویندوز با PyWin32 کار می‌کند. از آنجا که \fB\-\-track_memory\fP هنگام جمع‌آوری اندازه‌گیری‌های حافظه نوسان (jitter) کارایی ایجاد می‌کند، در گزارش نهایی تنها مصرف حافظه گزارش می‌شود. .SH "بنچمارک‌ها (BENCHMARKS)" .sp همچنین برای نحوه ایجاد بنچمارک‌های خود یا استفاده از بنچمارک‌های دیگران، بخش Custom Benchmarks \%<> را ببینید. .SS گروه‌های دردسترس .sp مشابه بنچمارک‌های تکی (به \(dqبنچمارک‌های دردسترس\(dq در زیر نگاه کنید)، استفاده از گروه‌های بنچمارک نیز پس از گزینه \fI\-b\fP مجاز است. از دستور \fBpython3 \-m pyperformance list_groups\fP برای فهرست کردن گروه‌ها و بنچمارک‌های آن‌ها استفاده کنید. .sp گروه‌های بنچمارک دردسترس: .INDENT 0.0 .IP \(bu 2 \fBall\fP: گروهی شامل تمام بنچمارک‌ها .IP \(bu 2 \fBapps\fP: بنچمارک‌های کاربردی \(dqسطح بالا\(dq (مانند 2to3، Chameleon و Tornado HTTP) .IP \(bu 2 \fBdefault\fP: گروهی از بنچمارک‌ها که به‌طور پیش‌فرض توسط دستور \fBrun\fP اجرا می‌شوند .IP \(bu 2 \fBmath\fP: اعداد ممیز شناور و صحیح .IP \(bu 2 \fBregex\fP: مجموعه‌ای از بنچمارک‌های عبارات منظم .IP \(bu 2 \fBserialize\fP: بنچمارک‌های مربوط به ماژول‌های \fBpickle\fP و \fBjson\fP .IP \(bu 2 \fBstartup\fP: مجموعه‌ای از ریزبنچمارک‌ها با تمرکز بر زمان راه‌اندازی (start\-up) مفسر پایتون. .IP \(bu 2 \fBtemplate\fP: کتابخانه‌های قالب‌ساز .UNINDENT .sp از دستور \fBpython3 \-m pyperformance list_groups\fP برای فهرست کردن گروه‌ها و بنچمارک‌های آن‌ها استفاده کنید..SS بنچمارک‌های موجود .sp در pyperformance 0.5.5، ریزبنچمارک‌های زیر حذف شده‌اند زیرا بسیار کوتاه‌اند، نمایندهٔ برنامه‌های کاربردی واقعی نیستند و بیش از حد ناپایدارند. .INDENT 0.0 .IP \(bu 2 \fBcall_method_slots\fP .IP \(bu 2 \fBcall_method_unknown\fP .IP \(bu 2 \fBcall_method\fP .IP \(bu 2 \fBcall_simple\fP .IP \(bu 2 \fBpybench\fP .UNINDENT .SS 2to3 .sp اجرای ابزار 2to3 بر روی دایرکتوری \fBpyperformance/benchmarks/data/2to3/\fP: رونوشتی از ۹ فایل \fBdjango/core/*.py\fP مربوط به Django 1.1.4. .sp اجرای دستور \fBpython \-m lib2to3 \-f all \fP که در آن \fBpython\fP همان \fBsys.executable\fP است\&. بنابراین این آزمون تنها کارایی خود Python را نمی‌سنجد، بلکه کارایی ماژول \fBlib2to3\fP را نیز می‌سنجد که می‌تواند بسته به نسخهٔ Python تغییر کند. .sp \fBنکته:\fP .INDENT 0.0 .INDENT 3.5 فایل‌ها به جای \fB\&.py\fP با پسوند \fB\&.py.txt\fP نام‌گذاری شده‌اند تا بررسی‌های PEP 8 روی آن‌ها اعمال نشود و به‌طور کلی‌تر، تغییری در آن‌ها ایجاد نگردد. .UNINDENT .UNINDENT .SS async_tree .sp بنچمارک بار کاری ناهمگام (Async)، که تابع \fBasyncio.gather()\fP را روی یک درخت (با عمق ۶ سطح و ۶ شاخه در هر سطح) فراخوانی می‌کند، در حالی که گره‌های برگ کارهای [احتمالاً] ناهمگام را شبیه‌سازی می‌کنند (بسته به گونهٔ بنچمارک). گونه‌های موجود: .INDENT 0.0 .IP \(bu 2 \fBasync_tree\fP: بدون هیچ کار ناهمگام واقعی در هیچ‌کدام از گره‌های برگ. .IP \(bu 2 \fBasync_tree_io\fP: تمام گره‌های برگ، بار کاری IO ناهمگام را شبیه‌سازی می‌کنند (خواب ناهمگام به مدت ۵۰ میلی‌ثانیه). .IP \(bu 2 \fBasync_tree_memoization\fP: تمام گره‌های برگ، بار کاری IO ناهمگام را شبیه‌سازی می‌کنند در حالی که ۹۰٪ داده‌ها به‌خاطرسپرده (memoize) شده‌اند. .IP \(bu 2 \fBasync_tree_cpu_io_mixed\fP: نیمی از گره‌های برگ بار کاری وابسته به پردازنده (CPU\-bound) را شبیه‌سازی می‌کنند (\fBmath.factorial(500)\fP) و نیم دیگر بار کاری مشابه با گونهٔ \fBasync_tree_memoization\fP را شبیه‌سازی می‌کنند. .UNINDENT .sp این بنچمارک‌ها همچنین در صورت دردسترس بودن، دارای گونهٔ \(dqeager\(dq هستند که از eager task factory ماژول asyncio استفاده می‌کند. .SS base64 .sp سنجش کارایی توابع کدگذاری و رمزگشایی ماژول \fBbase64\fP\&. هر الگوریتم دارای گونه‌های \fB_small\fP و \fB_large\fP است که هر دو عمل کدگذاری و رمزگشایی را در یک بنچمارک واحد می‌سنجند: .INDENT 0.0 .IP \(bu 2 \fB_small\fP: تکرارهای متعادل میان اندازه‌های دادهٔ 20B، 127B، 3KiB و 9KB که بیشتر احتمال دارد اثر سربار را نشان دهند. .IP \(bu 2 \fB_large\fP: تمرکز بر داده‌های بزرگ با اندازه‌های 100KiB و حدود 1MiB که احتمالاً بازدهی پیاده‌سازی را نشان می‌دهند. .UNINDENT .sp بنچمارک‌های موجود: .INDENT 0.0 .IP \(bu 2 \fBbase64_small\fP، \fBbase64_large\fP: کدگذاری و رمزگشایی استاندارد Base64 .IP \(bu 2 \fBurlsafe_base64_small\fP: کدگذاری Base64 امن برای URL (تنها نسخهٔ کوچک، زیرا نشانی‌های وب نباید حاوی داده‌های بسیار بزرگ باشند) .IP \(bu 2 \fBbase32_small\fP، \fBbase32_large\fP: کدگذاری و رمزگشایی Base32 .IP \(bu 2 \fBbase16_small\fP، \fBbase16_large\fP: کدگذاری و رمزگشایی Base16/hex .IP \(bu 2 \fBascii85_small\fP، \fBascii85_large\fP: کدگذاری و رمزگشایی Ascii85 (شامل مسیر کد \fBwrapcol=76\fP) .IP \(bu 2 \fBbase85_small\fP، \fBbase85_large\fP: کدگذاری و رمزگشایی Base85 .UNINDENT .sp ماژول base64 را ببینید: \%\&..SS chameleon .sp رندر کردن یک قالب با استفاده از ماژول \fBchameleon\fP برای ایجاد یک جدول HTML با ۵۰۰ سطر و ۱۰ ستون. .sp کلاس \fBchameleon.PageTemplate\fP را ببینید. .SS chaos .sp ایجاد فرکتال‌های مشابه بازی آشوب (chaosgame). گزینه‌های خط فرمان: .INDENT 0.0 .INDENT 3.5 .sp .EX \-\-thickness THICKNESS ضخامت (پیش‌فرض: 0.25) \-\-width WIDTH عرض تصویر (پیش‌فرض: 256) \-\-height HEIGHT ارتفاع تصویر (پیش‌فرض: 256) \-\-iterations ITERATIONS تعداد تکرارها (پیش‌فرض: 5000) \-\-filename FILENAME.PPM نام فایل خروجی تصویر PPM \-\-rng\-seed RNG_SEED بذر تولیدکننده عدد تصادفی (پیش‌فرض: 1234) .EE .UNINDENT .UNINDENT .sp هنگامی که گزینهٔ \fB\-\-filename\fP استفاده می‌شود، زمان‌سنجی شامل زمان ایجاد فایل PPM نیز می‌شود. .sp حق نشر (C) 2005 Carl Friedrich Bolz [تصویر: بازی آشوب، بنچ‌مارک bm_chaos] [تصویر] .sp تصویر تولیدشده توسط bm_chaos (روی CPython 3.5 ۳ ثانیه طول کشید) با دستور: .INDENT 0.0 .INDENT 3.5 .sp .EX python3 pyperformance/benchmarks/bm_chaos.py \-\-worker \-l1 \-w0 \-n1 \-\-filename chaos.ppm \-\-width=512 \-\-height=512 \-\-iterations 50000 .EE .UNINDENT .UNINDENT .SS crypto_pyaes .sp بنچ‌مارک یک پیاده‌سازی پایتون خالص از رمز قطعه‌ای AES در حالت CTR با استفاده از ماژول \fBpyaes\fP. .sp این بنچ‌مارک روی CPython 3 در مقایسه با CPython 2.7 کندتر است، زیرا CPython 3 دیگر نوع دادهٔ \(dqsmall int\(dq (\fBint\fP) را ندارد. نوع \fBint\fP در CPython 3 اکنون همیشه دارای اندازهٔ دلخواه است، مانند نوع \fBlong\fP در CPython 2.7. .sp پروژهٔ pyaes در \% را ببینید: یک پیاده‌سازی پایتون خالص از الگوریتم رمز قطعه‌ای AES و حالت‌های عملیاتی رایج (CBC، CFB، CTR، ECB و OFB). .SS deepcopy .sp بنچ‌مارک متد \fIcopy.deepcopy\fP پایتون. متد \fIdeepcopy\fP روی یک دیکشنری تو در تو و یک dataclass اجرا می‌شود. .SS deltablue .sp بنچ‌مارک DeltaBlue .sp پورت‌شده برای پروژهٔ PyPy. با مشارکت Daniel Lindsley .sp این پیاده‌سازی از بنچ‌مارک DeltaBlue مستقیماً از کد منبع V8 در \% پورت شده است، که آن هم به نوبهٔ خود از پیاده‌سازی Smalltalk توسط John Maloney و Mario Wolczko مشتق شده بود. پیاده‌سازی اصلی Javascript تحت پروانهٔ GPL منتشر شده بود. .sp در بخش‌هایی به‌روزرسانی شده تا با سبک پایتون سازگارتر باشد (حلقه‌های for روی مجموعه‌ها، چند متد جادویی، استفاده از یک لیست برای \fBOrderedCollection\fP، و تغییر مواردی که این مجموعه‌ها را دستکاری می‌کردند به متدهای توکار) اما تا حد زیادی ساختار و منطق نسخهٔ اصلی را حفظ کرده است. (اه!) .SS django_template .sp استفاده از سیستم قالب‌بندی Django برای ساخت یک جدول HTML با ۱۵۰×۱۵۰ خانه. .sp از کلاس‌های \fBContext\fP و \fBTemplate\fP از ماژول \fBdjango.template\fP استفاده می‌کند. .SS dulwich_log .sp پیمایش روی کامیت‌های مخزن گیت asyncio با استفاده از ماژول Dulwich. از مخزن \fBpyperformance/benchmarks/data/asyncio.git/\fP استفاده می‌کند. .sp شبه‌کد بنچ‌مارک: .INDENT 0.0 .INDENT 3.5 .sp .EX repo = dulwich.repo.Repo(repo_path) head = repo.head() for entry in repo.get_walker(head): pass .EE .UNINDENT .UNINDENT .sp پروژهٔ Dulwich در \%\& را ببینید..SS docutils .sp استفاده از Docutils \% برای تبدیل مستندات Docutils به HTML. نمونه‌ای از ساخت یک مجموعه مستندات با اندازه متوسط. .SS fannkuch .sp پروژه The Computer Language Benchmarks Game: \% .sp ارائه‌شده توسط Sokolov Yura، اصلاح‌شده توسط Tupteq. .SS float .sp بنچمارک ساختگی با محاسبات سنگین ممیز شناور که در اصل توسط Factor استفاده شده است. .sp ایجاد ۱۰۰٬۰۰۰ شیء point که \fBmath.cos()\fP، \fBmath.sin()\fP و \fBmath.sqrt()\fP را محاسبه می‌کنند. .sp تغییریافته در نسخه 0.5.5: استفاده از \fB__slots__\fP در کلاس Point جهت تمرکز بنچمارک روی ممیز شناور به جای آزمودن کارایی ویژگی‌های کلاس. .SS genshi .sp رندر کردن یک قالب با استفاده از Genshi (ماژول \fBgenshi.template\fP): .INDENT 0.0 .IP \(bu 2 \fBgenshi_text\fP: رندر کردن یک قالب HTML با استفاده از کلاس \fBNewTextTemplate\fP .IP \(bu 2 \fBgenshi_xml\fP: رندر کردن یک قالب XML با استفاده از کلاس \fBMarkupTemplate\fP .UNINDENT .sp پروژه Genshi را ببینید: \%\&. .SS go .sp هوش مصنوعی برای انجام بازی تخته‌ای Go. از Zobrist hashing استفاده می‌کند \%\&. .SS hexiom .sp حل‌کننده بازی تخته‌ای Hexiom (به‌طور پیش‌فرض سطح ۲۵). گزینه خط فرمان: .INDENT 0.0 .INDENT 3.5 .sp .EX \-\-level {2,10,20,25,30,36} Hexiom board level (default: 25) .EE .UNINDENT .UNINDENT .SS hg_startup .sp دریافت صفحه راهنمای Mercurial. .sp سنجش کارایی دستور \fBpython path/to/hg help\fP با استفاده از \fBpyperf.Runner.bench_command()\fP، که در آن \fBpython\fP همان \fBsys.executable\fP و \fBpath/to/hg\fP برنامه Mercurial نصب‌شده در یک محیط مجازی است. .sp تابع \fBbench_command()\fP خروجی‌های stdout و stderr را به \fB/dev/null\fP هدایت می‌کند\&. .sp پروژه Mercurial را ببینید: \%\&. .SS html5lib .sp تجزیه فایل HTML با نام \fBpyperformance/benchmarks/data/w3_tr_html5.html\fP (۱۳۲ کیلوبایت) با استفاده از \fBhtml5lib\fP\&. این فایل همان مشخصات HTML 5 است، اما کوتاه شده است تا تجزیه آن در کمتر از ۱ ثانیه (حدود ۲۵۰ میلی‌ثانیه) انجام شود. .sp روی CPython، پس از ۳ مرحله گرم‌کردن (warmup)، بنچمارک وارد چرخه‌ای از ۵ مقدار می‌شود: هر پنجمین مقدار ۱۰٪ کندتر است. نمودار ۱ اجرا از ۵۰ مقدار (مرحله گرم‌کردن ترسیم نشده است): [image: html5lib values] [image] .sp پروژه html5lib را ببینید: \%\&. .SS json_dumps, json_loads .sp سنجش کارایی توابع \fBdumps()\fP و \fBloads()\fP از ماژول \fBjson\fP. .sp گزینه خط فرمان \fBbm_json_dumps.py\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX \-\-cases CASES Comma separated list of cases. Available cases: EMPTY, SIMPLE, NESTED, HUGE. By default, run all cases. .EE .UNINDENT .UNINDENT.SS logging .sp بنچمارک‌ها روی ماژول \fBlogging\fP: .INDENT 0.0 .IP \(bu 2 \fBlogging_format\fP: بنچمارک \fBlogger.warn(fmt, str)\fP .IP \(bu 2 \fBlogging_simple\fP: بنچمارک \fBlogger.warn(msg)\fP .IP \(bu 2 \fBlogging_silent\fP: بنچمارک \fBlogger.debug(msg)\fP هنگامی که لاگ نادیده گرفته می‌شود .UNINDENT .sp گزینهٔ خط فرمان اسکریپت: .INDENT 0.0 .INDENT 3.5 .sp .EX format silent simple .EE .UNINDENT .UNINDENT .sp ماژول logging را ببینید \%\&. .SS mako .sp استفاده از سیستم قالب Mako برای ساخت یک جدول HTML با ابعاد 150x150 سلول. شامل: .INDENT 0.0 .IP \(bu 2 دو وراثت قالب .IP \(bu 2 گریزدهی HTML، گریزدهی XML، گریزدهی URL و هرس فاصله‌های خالی .IP \(bu 2 تعریف و فراخوانی توابع .IP \(bu 2 حلقه‌های for .UNINDENT .sp پروژهٔ Mako را ببینید \%\&. .SS mdp .sp نبرد همراه با خسارت‌ها و مرتب‌سازی توپولوژیکی گره‌ها در یک گراف. .sp مرتب‌سازی توپولوژیکی را ببینید \%\&. .SS meteor_contest .sp حل‌کننده برای صفحه پازل Meteor. .sp صفحه پازل Meteor: \% .sp پروژهٔ The Computer Language Benchmarks Game: \% .sp ارائه شده توسط Daniel Nanz، 2008\-08\-21. .SS nbody .sp بنچمارک N\-body از The Computer Language Benchmarks Game. میکروبنچمارک روی محاسبات ممیز شناور. .sp این مورد برای پشتیبانی از perf.py متعلق به Unladen Swallow در نظر گرفته شده است. بر همین اساس، نسبت به نسخهٔ Shootout تغییر یافته است: .INDENT 0.0 .IP \(bu 2 پذیرش گزینه‌های استاندارد بنچمارک Unladen Swallow. .IP \(bu 2 اجرای report_energy()/advance() در یک حلقه. .IP \(bu 2 پیاده‌سازی دوبارهٔ itertools.combinations() برای سازگاری با نسخه‌های قدیمی‌تر Python. .UNINDENT .sp برگرفته از: \% .sp ارائه شده توسط Kevin Carson. تغییریافته توسط Tupteq، Fredrik Johansson و Daniel Nanz. .SS python_startup, python_startup_nosite .INDENT 0.0 .IP \(bu 2 \fBpython_startup\fP: اندازه‌گیری زمان راه‌اندازی Python، اجرای \fBpython \-c pass\fP که در آن \fBpython\fP همان \fBsys.executable\fP است .IP \(bu 2 \fBpython_startup_nosite\fP: اندازه‌گیری زمان راه‌اندازی Python بدون وارد کردن ماژول \fBsite\fP، اجرای \fBpython \-S \-c pass\fP که در آن \fBpython\fP همان \fBsys.executable\fP است .UNINDENT .sp اجرای بنچمارک با \fBpyperf.Runner.bench_command()\fP\&..SS nqueens .sp حل‌کننده ساده و جستجوی جامع (brute\-force) برای معمای N\-وزیر. .sp معمای هشت وزیر را ببینید: \%\&. .SS pathlib .sp سنجش کارایی عملیات ماژول \fBpathlib\fP از کتابخانه استاندارد. .sp این بنچمارک بر ایجاد اشیاء کوچک، الگوخوانی مسیر (globbing) و فراخوانی‌های سیستمی فشار وارد می‌کند. .sp مستندات ماژول pathlib را ببینید: \%\&. .SS pickle .sp بنچمارک‌های pickle (سریال‌سازی): .INDENT 0.0 .IP \(bu 2 \fBpickle\fP: استفاده از ماژول cPickle برای پیکل کردن مجموعه‌داده‌های مختلف. .IP \(bu 2 \fBpickle_dict\fP: ریز‌بنچمارک؛ استفاده از ماژول cPickle برای پیکل کردن تعداد زیادی dict. .IP \(bu 2 \fBpickle_list\fP: ریز‌بنچمارک؛ استفاده از ماژول cPickle برای پیکل کردن تعداد زیادی list. .IP \(bu 2 \fBpickle_pure_python\fP: استفاده از ماژول خالص پایتونی pickle برای پیکل کردن مجموعه‌داده‌های مختلف. .UNINDENT .sp بنچمارک‌های unpickle (دی‌سریال‌سازی): .INDENT 0.0 .IP \(bu 2 \fBunpickle\fP: استفاده از ماژول cPickle برای آن‌پیکل کردن مجموعه‌داده‌های مختلف. .IP \(bu 2 \fBunpickle_list\fP .IP \(bu 2 \fBunpickle_pure_python\fP: استفاده از ماژول خالص پایتونی pickle برای آن‌پیکل کردن مجموعه‌داده‌های مختلف. .UNINDENT .SS pidigits .sp محاسبه ۲٬۰۰۰ رقم از π. این بنچمارک بر محاسبات اعداد صحیح بزرگ فشار می‌آورد. .sp گزینه‌ خط فرمان: .INDENT 0.0 .INDENT 3.5 .sp .EX \-\-digits DIGITS تعداد ارقام محاسبه‌شده پی (پیش‌فرض: 2000) .EE .UNINDENT .UNINDENT .sp برگرفته از کد در: \% .SS pyflate .sp بنچمارک ازفشرده‌ساز bzip2 با پایتون خالص: باز کردن فایل \fBpyperformance/benchmarks/data/interpreter.tar.bz2\fP در حافظه از حالت فشرده. .sp کپی‌رایت 2006\-\-2007\-01\-21 متعلق به Paul Sladen: \% .sp شما می‌توانید این کد را تحت هر یک از مجوزهای سازگار با DFSG (مانند BSD یا GNU GPLv2) استفاده و توزیع کنید. .sp رمزگشا/ازفشرده‌ساز مستقل DEFLATE (gzip) و bzip2 با پایتون خالص. این ابزار احتمالاً برای اهداف پژوهشی/ایجاد نمایه کاربردی‌تر است؛ مسلماً در بخش تطبیق‌دهنده بیتی هافمن هنوز جای بهبود وجود دارد. .sp در پیاده‌سازیِ موجود، اشکال شناخته‌شده‌ای در رمزگشایی BWT مربوط به رشته‌های تکراری وجود داشت. این مشکل دور زده شده است؛ \(aqbwt_reverse()\(aq را ببینید. در تمام موارد آزمون خروجی صحیح تولید می‌شود، اما در حالت ایده‌آل باید ریشه مشکل پیدا می‌شد... .SS raytrace .sp ردیاب پرتو (raytracer) ساده. .sp گزینه‌های خط فرمان: .INDENT 0.0 .INDENT 3.5 .sp .EX \-\-width WIDTH عرض تصویر (پیش‌فرض: 100) \-\-height HEIGHT ارتفاع تصویر (پیش‌فرض: 100) \-\-filename FILENAME.PPM نام فایل خروجی تصویر PPM .EE .UNINDENT .UNINDENT .sp این فایل حاوی تعاریفی برای یک ردیاب پرتو ساده است. کپی‌رایت Callum و Tony Garnock\-Jones، سال 2008. .sp این فایل را می‌توان آزادانه تحت مجوز MIT بازتوزیع کرد، \% .sp از \% [تصویر: Pure Python raytracer] [تصویر] .sp تصویر تولیدشده با دستور (در CPython 3.5 حدود 68.4 ثانیه زمان برد): .INDENT 0.0 .INDENT 3.5 .sp .EX python3 pyperformance/benchmarks/bm_raytrace.py \-\-worker \-\-filename=raytrace.ppm \-l1 \-w0 \-n1 \-v \-\-width=800 \-\-height=600 .EE .UNINDENT .UNINDENT.SS regex_compile .sp تحت فشار قرار دادن کارایی کامپایلر regex در Python، به‌جای سرعت اجرای آن. .sp سنجش میزان سرعت پیاده‌سازی regex در Python در کامپایل عبارات باقاعده. .sp ما تمام عبارات باقاعده استفاده‌شده توسط دیگر بنچمارک‌های regex را گردآوری کرده، با جایگزینی ماژول re با یک نسخهٔ ساختگی (stub) آن‌ها را به دام می‌اندازیم و سپس آن عبارات باقاعده را مکرراً کامپایل می‌کنیم. ما در حافظهٔ پنهان ماژول re دست‌کاری می‌کنیم تا آن را وادار کنیم هر عبارت باقاعده‌ای را که به آن می‌دهیم مجدداً کامپایل کند. .SS regex_dna .sp بنچمارک regex DNA با استفاده از \(dqfasta\(dq برای ایجاد مورد آزمون. .sp مسابقه بنچمارک زبان‌های رایانه‌ای (The Computer Language Benchmarks Game) \% .sp برنامه شماره ۵ regex\-dna در Python 3: ارائه‌شده توسط Dominique Wahli 2to3 اصلاح‌شده توسط Justin Peel .sp برنامه شماره ۳ fasta در Python 3: اصلاح‌شده توسط Ian Osgood اصلاح مجدد توسط Heinrich Acker اصلاح‌شده توسط Justin Peel اصلاح‌شده توسط Christopher Sean Forgeron .SS regex_effbot .sp برخی از بنچمارک‌های اصلی مورد استفاده برای تنظیم و بهینه‌سازی موتور regex فعلی در خط اصلی توسعهٔ Python. .SS regex_v8 .sp پورت بنچمارک regex موتور V8 برای Python. .sp تولیدشده به‌صورت خودکار در 2009\-01\-30. .sp این بنچمارک با بارگذاری ۵۰ صفحه از محبوب‌ترین صفحات وب و ثبت تمامی عملیات regexp انجام‌شده تولید شده است. به هر عملیات وزنی اختصاص می‌یابد که از تخمین محبوبیت صفحاتی که در آن‌ها رخ می‌دهد و تعداد دفعات اجرای آن هنگام بارگذاری هر صفحه محاسبه شده است. در نهایت، حروف نویسه‌ای در داده‌ها با استفاده از ROT13 به‌گونه‌ای رمزگذاری شده‌اند که بر نحوهٔ تطابق regexp با ورودی‌هایشان تأثیری نداشته باشد. .sp برای Unladen Swallow به Python پورت شده است. نسخهٔ اصلی JS را می‌توان در \%، r1243 یافت. .SS richards .sp بنچمارک کلاسیک Richards در Python. .sp بر پایه یک نسخهٔ Java. .sp بر اساس نسخهٔ اصلی نوشته‌شده به زبان BCPL توسط Dr Martin Richards در سال ۱۹۸۱ در آزمایشگاه رایانهٔ دانشگاه کمبریج، انگلستان و یک نسخهٔ C++ برگرفته از نسخهٔ Smalltalk نوشته‌شده توسط L Peter Deutsch. .sp نسخهٔ Java: حق نشر (C) ۱۹۹۵ Sun Microsystems, Inc. ترجمه‌شده از C++ توسط Mario Wolczko، حلقه بیرونی اضافه‌شده توسط Alex Jacoby. .SS scimark .INDENT 0.0 .IP \(bu 2 \fBscimark_sor\fP: بنچمارک Successive over\-relaxation (SOR) \% .IP \(bu 2 \fBscimark_sparse_mat_mult\fP: بنچمارک ضرب ماتریس تنک (sparse matrix) \% multiplication \% .IP \(bu 2 \fBscimark_monte_carlo\fP: بنچمارک الگوریتم مونت‌کارلو \% برای محاسبه مساحت یک دیسک .IP \(bu 2 \fBscimark_lu\fP: بنچمارک تجزیه LU \% .IP \(bu 2 \fBscimark_fft\fP: بنچمارک تبدیل فوریه سریع (FFT) \% .UNINDENT .SS spectral_norm .sp سایت MathWorld: \(dqمسائل چالش صد دلاری، صد رقمی\(dq، چالش شماره ۳. \% .sp مسابقه بنچمارک زبان‌های رایانه‌ای (The Computer Language Benchmarks Game) \% .sp ارائه‌شده توسط Sebastien Loisel. تصحیح‌شده توسط Isaac Gouy. افزایش سرعت توسط Josh Goldfoot. افزایش سرعت با ترفندهای نامتعارف (dirtily sped up) توسط Simon Descarpentries. پیاده‌سازی همزمانی توسط Jason Stitt..SS sqlalchemy_declarative, sqlalchemy_imperative .INDENT 0.0 .IP \(bu 2 \fBsqlalchemy_declarative\fP: محک SQLAlchemy Declarative با استفاده از SQLite .IP \(bu 2 \fBsqlalchemy_imperative\fP: محک SQLAlchemy Imperative با استفاده از SQLite .UNINDENT .sp پروژهٔ SQLAlchemy را ببینید: \%\&. .SS sqlite_synth .sp محک توابع تجمیعی پایتون برای SQLite. .sp هدف این محک (نوشته‌شده برای PyPy) سنجش کارایی CFFI و تبادلات زیاد رفت‌وبرگشتی میان SQLite و Python است. بنابراین، خود پرس‌وجوها بسیار ساده هستند. .sp پروژهٔ SQLite را در \% و ماژول sqlite3 پایتون (stdlib) را در \%\& ببینید. .SS sympy .sp محک روی ماژول \fBsympy\fP: .INDENT 0.0 .IP \(bu 2 \fBsympy_expand\fP: محک \fBsympy.expand()\fP .IP \(bu 2 \fBsympy_integrate\fP: محک \fBsympy.integrate()\fP .IP \(bu 2 \fBsympy_str\fP: محک \fBstr(sympy.expand())\fP .IP \(bu 2 \fBsympy_sum\fP: محک \fBsympy.summation()\fP .UNINDENT .sp در CPython، برخی از مقادیر \fBsympy_sum\fP بین ۵٪ تا ۱۰٪ کندتر هستند: .INDENT 0.0 .INDENT 3.5 .sp .EX $ python3 \-m pyperf dump sympy_sum.json Run 1: 1 warmup, 50 values, 1 loop \- warmup 1: 404 ms (+63%) \- value 1: 244 ms \- value 2: 245 ms \- value 3: 258 ms <\-\-\-\- \- value 4: 245 ms \- value 5: 245 ms \- value 6: 279 ms (+12%) <\-\-\-\- \- value 7: 246 ms \- value 8: 244 ms \- value 9: 245 ms \- value 10: 255 ms <\-\-\-\- \- value 11: 245 ms \- value 12: 245 ms \- value 13: 256 ms <\-\-\-\- \- value 14: 248 ms \- value 15: 245 ms \- value 16: 245 ms \&... .EE .UNINDENT .UNINDENT .sp نمودار ۱ اجرا از ۵۰ مقدار (مرحلهٔ گرم‌کردن [warmup] رسم نشده است): [تصویر: مقادیر sympy_sum] [تصویر] .sp پروژهٔ sympy را ببینید: \%\&. .SS telco .sp محک Telco برای سنجش کارایی محاسبات ده‌دهی (اعشاری): .INDENT 0.0 .IP \(bu 2 \% .IP \(bu 2 \% .IP \(bu 2 یک شناسهٔ نوع تماس، \fBc\fP، از کم‌ارزش‌ترین بیت (least significant bit) مدت‌زمان تنظیم می‌شود (از این رو \fBc\fP برابر 0 یا 1 است). .IP \(bu 2 یک نرخ، \fBr\fP، از روی نوع تماس تعیین می‌شود. تماس‌هایی با \fBc=0\fP دارای نرخ پایین \fBr\fP هستند: \fB0.0013\fP؛ باقی آن‌ها (تماس‌های راه دور یا «distance calls») دارای نرخ ویژهٔ \fBr\fP هستند: \fB0.00894\fP\&. (نرخ‌ها، بسیار تقریبی، بر حسب یورو یا دلار در ثانیه هستند.) .IP \(bu 2 سپس هزینهٔ تماس، \fBp\fP، محاسبه می‌شود (\fBp=r*n\fP). این مقدار با استفاده از روش گرد کردن به نزدیک‌ترین زوج (round\-half\-even یا روش بانکدار) دقیقاً تا ۲ رقم اعشار گرد می‌شود. .IP \(bu 2 مالیات پایه، \fBb\fP، محاسبه می‌شود: \fBb=p*0.0675\fP (۶.۷۵٪). این مقدار دقیقاً تا ۲ رقم اعشار بریده می‌شود (گرد کردن به پایین)، و سپس متغیر مجموع مالیات پایه افزایش می‌یابد (\fBsumB=sumB+b\fP). .IP \(bu 2 برای تماس‌های راه دور: مالیات مسافت، \fBd\fP، محاسبه می‌شود: \fBd=p*0.0341\fP (۳.۴۱٪). این مقدار دقیقاً تا ۲ رقم اعشار بریده می‌شود (گرد کردن به پایین)، و سپس متغیر مجموع مالیات مسافت افزایش می‌یابد (\fBsumD=sumD+d\fP). .IP \(bu 2 هزینهٔ کل، \fBt\fP، محاسبه می‌شود (\fBt=p+b\fP، و اگر تماس راه دور باشد، \fBt=t+d\fP). .IP \(bu 2 متغیر مجموع هزینه‌ها افزایش می‌یابد (\fBsumT=sumT+t\fP). .IP \(bu 2 هزینهٔ کل، \fBt\fP، به یک رشته، \fBs\fP تبدیل می‌شود\&. .UNINDENT .sp این محک پایتون با ماژول \fBdecimal\fP پیاده‌سازی شده است. .sp ماژول decimal پایتون (stdlib) را ببینید: \%\&..SS tornado_http .sp بنچمارک سرور HTTP مربوط به ماژول \fBtornado\fP .sp پروژه Tornado را ببینید \%\&. .SS unpack_sequence .sp میکروبنچمارک برای باز کردن (unpacking) لیست‌ها و تاپل‌ها. .sp شبه‌کد: .INDENT 0.0 .INDENT 3.5 .sp .EX a, b, c, d, e, f, g, h, i, j = to_unpack .EE .UNINDENT .UNINDENT .sp که در آن \fBto_unpack\fP برابر با \fBtuple(range(10))\fP یا \fBlist(range(10))\fP است\&. .SS xml_etree .sp بنچمارک API مربوط به \fBElementTree\fP از ماژول \fBxml.etree\fP: .INDENT 0.0 .IP \(bu 2 \fBxml_etree_generate\fP: ایجاد یک سند XML .IP \(bu 2 \fBxml_etree_iterparse\fP: بنچمارک \fBetree.iterparse()\fP .IP \(bu 2 \fBxml_etree_parse\fP: بنچمارک \fBetree.parse()\fP .IP \(bu 2 \fBxml_etree_process\fP: پردازش یک سند XML .UNINDENT .sp ماژول xml.etree.ElementTree پایتون (stdlib) را ببینید \%\&. .SH "بنچمارک‌های سفارشی (CUSTOM BENCHMARKS)" .sp ابزار pyperformance شامل مجموعه‌ای از بنچمارک‌های پیش‌فرض خود است (بخش Benchmarks \%<> را ببینید). با این حال، از بنچمارک‌های سفارشی نیز پشتیبانی می‌کند. .SS استفاده از بنچمارک‌های سفارشی .sp برای استفاده از بنچمارک‌های سفارشی، باید از گزینه خط فرمان \fB\-\-manifest\fP استفاده کرده و مسیر فایل مانیفست توصیف‌کننده آن بنچمارک‌ها را ارائه دهید. .SS قالب‌های فایل pyperformance .sp \fBpyperformance\fP از دو قالب فایل برای شناسایی بنچمارک‌ها استفاده می‌کند: .INDENT 0.0 .IP \(bu 2 manifest \- مجموعه‌ای از بنچمارک‌ها .IP \(bu 2 metadata \- یک بنچمارک منفرد .UNINDENT .sp برای هر بنچمارک، دو فایل الزامی و چندین فایل اختیاری وجود دارد. انتظار می‌رود این فایل‌ها در یک ساختار دایرکتوری مشخص قرار داشته باشند (مگر اینکه در متادیتا سفارشی‌سازی شده باشد). .sp این ساختار (به زیر مراجعه کنید) به گونه‌ای است که نگهداری یک بنچمارک (یا مجموعه‌ای از بنچمارک‌ها) در GitHub و توزیع آن در PyPI را آسان می‌کند. همچنین انتشار بنچمارک‌های یک پروژه پایتون را ساده می‌سازد. راهکار جایگزین، ارجاع دادن افراد به یک مخزن است. .sp بنچمارک‌ها می‌توانند متادیتا را از فایل‌های متادیتای دیگر به ارث ببرند. این قابلیت برای نگهداری متادیتای مشترک یک مجموعه بنچمارک (مانند \(dqversion\(dq) در یک فایل مفید است. به همین ترتیب، بنچمارک‌های یک پروژه پایتون می‌توانند متادیتا را از فایل pyproject.toml پروژه به ارث ببرند. .sp گاهی اوقات یک بنچمارک دارای یک یا چند نگارش متغیر (variant) است که با استفاده از همان اسکریپت اجرا می‌شوند. چنین متغیرهایی بدون نیاز به تلاش اضافی زیاد توسط \fBpyperformance\fP پشتیبانی می‌شوند. .SS ساختار دایرکتوری بنچمارک .sp به‌طور معمول یک بنچمارک ساختاری به این شکل دارد: .INDENT 0.0 .INDENT 3.5 .sp .EX bm_NAME/ data/ # if needed requirements.txt # lock file, if any pyproject.toml run_benchmark.py .EE .UNINDENT .UNINDENT .sp (به پیشوند \(dqbm_\(dq در نام دایرکتوری توجه کنید.) .sp فایل \(dqpyproject.toml\(dq حاوی متادیتا است. فایل \(dqrun_benchmark.py\(dq کد واقعی بنچمارک را در خود دارد. هر دو مورد الزامی هستند. .sp \fBpyperformance\fP با فایل متادیتا به عنوان منبع بنیادین اطلاعات درباره یک بنچمارک رفتار می‌کند. مانیفست برای یک مجموعه بنچمارک، در عمل یک نگاشت از نام‌ها به فایل‌های متادیتا است. بنابراین فایل متادیتا ضروری است. این فایل می‌تواند در هر کجای دیسک قرار گیرد. با این حال، اگر در ساختاری که در بالا توضیح داده شد قرار نداشته باشد، متادیتا باید مشخص کند که سایر فایل‌ها در کجا قرار دارند. .sp به غیر از آن، تنها یک اسکریپت بنچمارک (مانند \(dqrun_benchmark.py\(dq در بالا) مورد نیاز است. تمام فایل‌های دیگر اختیاری هستند. .sp هنگامی که یک بنچمارک دارای متغیرها (variants) باشد، هر کدام فایل متادیتای اختصاصی خود را در کنار \(dqpyproject.toml\(dq معمولی و با نام \(dqbm_NAME.toml\(dq خواهند داشت. (به پیشوند \(dqbm_\(dq توجه کنید.) قالب فایل‌های متادیتای این متغیرها کاملاً یکسان است. \fBpyperformance\fP به همان صورت با آن‌ها رفتار می‌کند، با این تفاوت که \(dqpyproject.toml\(dq همجوار به‌طور پیش‌فرض به ارث برده می‌شود..SS فایل‌های مانیفست (Manifest Files) .sp یک فایل مانیفست مجموعه‌ای از بنچ‌مارک‌ها و همچنین (به‌طور اختیاری) نحوه گروه‌بندی آن‌ها را مشخص می‌کند. \fBpyperformance\fP از مانیفست برای تعیین اینکه کدام بنچ‌مارک‌ها برای اجرا در دسترس هستند (و در نتیجه کدام موارد به‌طور پیش‌فرض اجرا شوند) استفاده می‌کند. .sp یک مانیفست معمولاً به این صورت است: .INDENT 0.0 .INDENT 3.5 .sp .EX [benchmarks] name metafile bench1 somedir/bm_bench1/pyproject.toml bench2 somedir/pyproject.toml bench3 ../anotherdir .EE .UNINDENT .UNINDENT .sp بخش \(dqbenchmarks\(dq جدولی با ردیف‌هایی از مقادیر جداشده با تب (tab\-separated\-values) است. مقدار \(dqname\(dq نحوه شناسایی بنچ‌مارک توسط \fBpyperformance\fP را تعیین می‌کند. مقدار \(dqmetafile\(dq مکانی است که \fBpyperformance\fP در آن به دنبال متادیتای بنچ‌مارک می‌گردد. اگر یک metafile یک دایرکتوری باشد، در آن دایرکتوری به دنبال \(dqpyproject.toml\(dq می‌گردد. .SS گروه‌های بنچ‌مارک (Benchmark Groups) .sp بخش‌های دیگر در فایل مانیفست مربوط به گروه‌بندی هستند: .INDENT 0.0 .INDENT 3.5 .sp .EX [benchmarks] name metafile bench1 somedir/bm_bench1 bench2 somedir/bm_bench2 bench3 anotherdir/mybench.toml [groups] tag1 tag2 [group default] bench2 bench3 [group tricky] bench2 .EE .UNINDENT .UNINDENT .sp بخش \(dqgroups\(dq گروه‌های در دسترسی را مشخص می‌کند که ممکن است توسط برچسب‌های بنچ‌مارک شناسایی شوند (درباره برچسب‌ها در بخش متادیتا در زیر را ببینید). هر بخش گروه دیگری در مانیفست به‌طور خودکار به فهرست گروه‌های موجود اضافه می‌شود. .sp اگر هیچ گروه \(dqdefault\(dq مشخص نشده باشد، گروهی به‌طور خودکار با تمام بنچ‌مارک‌های موجود در بخش \(dqbenchmarks\(dq اضافه می‌شود. اگر هیچ بخش \(dqgroups\(dq و هیچ بخش گروه مجزایی (به جز \(dqdefault\(dq) وجود نداشته باشد، مجموعه تمام برچسب‌های بنچ‌مارک‌های شناخته‌شده به‌عنوان \(dqgroups\(dq در نظر گرفته می‌شود. همچنین گروهی با نام \(dqall\(dq به‌طور خودکار اضافه می‌شود که شامل تمام بنچ‌مارک‌های شناخته‌شده است. .sp بنچ‌مارک‌ها می‌توانند با استفاده از یک پیشوند \fB\-\fP (منها) از یک گروه حذف شوند. هر بنچ‌مارکی که از قبل در فهرست باشد (در آن نقطه) و مطابقت داشته باشد، از فهرست حذف خواهد شد. اگر اولین ورودی در بخش یک حذف (استثنا) باشد، ابتدا تمام بنچ‌مارک‌های شناخته‌شده به فهرست اضافه می‌شوند و سپس حذف اعمال می‌گردد. .sp برای مثال: .INDENT 0.0 .INDENT 3.5 .sp .EX [benchmarks] name metafile bench1 somedir/bm_bench1 bench2 somedir/bm_bench2 bench3 anotherdir/mybench.toml [group default] \-bench1 .EE .UNINDENT .UNINDENT .sp این بدان معناست که به‌طور پیش‌فرض تنها \(dqbench2\(dq و \(dqbench3\(dq اجرا می‌شوند..SS ادغام مانیفست‌ها (Merging Manifests) .sp برای ترکیب مانیفست‌ها، از بخش \fB[includes]\fP در مانیفست استفاده کنید: .INDENT 0.0 .INDENT 3.5 .sp .EX [includes] project1/benchmarks/MANIFEST project2/benchmarks/MANIFEST .EE .UNINDENT .UNINDENT .sp توجه داشته باشید که \fB\fP همانند گنجاندن فایل مانیفست برای بنچمارک‌های پیش‌فرض pyperformance است. .SS مجموعه بنچمارک محلی (A Local Benchmark Suite) .sp اغلب پروژه‌ها بیش از یک بنچمارک دارند که با آن‌ها به عنوان یک مجموعه رفتار می‌شود. \fBpyperformance\fP این موضوع را بدون نیاز به هیچ کار اضافی مدیریت می‌کند. .sp در دایرکتوری حاوی فایل مانیفست، همه بنچمارک‌ها را قرار دهید. سپس عبارت \fB\fP را در ستون \(dqmetafile\(dq بگذارید، مانند این: .INDENT 0.0 .INDENT 3.5 .sp .EX [benchmarks] name metafile bench1 bench2 bench3 bench4 bench5 .EE .UNINDENT .UNINDENT .sp این ابزار به دنبال \fBDIR/bm_NAME/pyproject.toml\fP خواهد گشت\&. .sp اگر متغیرها یا گونه‌ها (variants) نیز وجود دارند، بنچمارک اصلی را در مقدار \(dqmetafile\(dq مشخص کنید، مانند این: .INDENT 0.0 .INDENT 3.5 .sp .EX [benchmarks] name metafile bench1 bench2 bench3 variant1 variant2 .EE .UNINDENT .UNINDENT .sp ابزار \fBpyperformance\fP به دنبال \fBDIR/bm_BASE/bm_NAME.toml\fP می‌گردد، که در آن \(dqBASE\(dq بخش پس از \(dqlocal:\(dq است. .SS مجموعه بنچمارک یک پروژه (A Project\(aqs Benchmark Suite) .sp یک پروژه پایتون می‌تواند مجموعه بنچمارک خود را با قرار دادن مسیر فایل مانیفست در بالاترین سطح فایل pyproject.toml پروژه مشخص کند. مانیفست‌های اضافی را نیز می‌توان مشخص کرد: .INDENT 0.0 .INDENT 3.5 .sp .EX [tool.pyperformance] manifest = \(dq...\(dq manifests = [\(dq...\(dq, \(dq...\(dq] .EE .UNINDENT .UNINDENT .sp (یادآوری: این pyproject.toml است، نه فایل مانیفست.) .SS فایل‌های فراداده بنچمارک (Benchmark Metadata Files) .sp فایل فراداده یک بنچمارک (معمولاً pyproject.toml) از قالبی پیروی می‌کند که در PEP 621 \% و PEP 518 \%\& مشخص شده است. بنابراین دو بخش پشتیبانی‌شده در این فایل وجود دارد: \(dqproject\(dq و \(dqtool.pyperformance\(dq. .sp یک فایل فراداده معمولی شبیه به این خواهد بود: .INDENT 0.0 .INDENT 3.5 .sp .EX [project] version = \(dq0.9.1\(dq dependencies = [\(dqpyperf\(dq] dynamic = [\(dqname\(dq] [tool.pyperformance] name = \(dqmy_benchmark\(dq .EE .UNINDENT .UNINDENT .sp یک نمونه بسیار دقیق‌تر و با جزئیات بیشتر می‌تواند شبیه به این باشد: .INDENT 0.0 .INDENT 3.5 .sp .EX [project] name = \(dqpyperformance_bm_json_dumps\(dq version = \(dq0.9.1\(dq description = \(dqA benchmark for json.dumps()\(dq requires\-python = \(dq>=3.8\(dq dependencies = [\(dqpyperf\(dq] urls = {repository = \(dqhttps://github.com/python/pyperformance\(dq} dynamic = [\(dqversion\(dq] [tool.pyperformance] name = \(dqjson_dumps\(dq tags = \(dqserialize\(dq runscript = \(dqbench.py\(dq datadir = \(dq.data\-files/extras\(dq extra_opts = [\(dq\-\-special\(dq] .EE .UNINDENT .UNINDENT.SS وراثت (Inheritance) .sp برای اینکه یک بنچ‌مارک از دیگری (یا از متادیتای مشترک) ارث‌بری کند، فیلد \(dqinherits\(dq در دسترس است: .INDENT 0.0 .INDENT 3.5 .sp .EX [project] dependencies = [\(dqpyperf\(dq] dynamic = [\(dqname\(dq, \(dqversion\(dq] [tool.pyperformance] name = \(dqmy_benchmark\(dq inherits = \(dq../common.toml\(dq .EE .UNINDENT .UNINDENT .sp تمام مقادیر در هر بخش از متادیتای به ارث برده‌شده به عنوان پیش‌فرض در نظر گرفته می‌شوند که متادیتای کنونی بر روی آن‌ها اعمال می‌شود. به عنوان نمونه در مثال بالا، مقدار \(dqversion\(dq در common.toml در اینجا استفاده خواهد شد. .sp اگر مقدار \(dqinherits\(dq یک دایرکتوری باشد (حتی برای \(dq..\(dq)، فایل \(dqbase.toml\(dq در آن دایرکتوری به ارث برده می‌شود. .sp برای variantها، فایل پایه pyproject.toml مقدار پیش‌فرض برای \(dqinherits\(dq است. .SS مقادیر استنتاج‌شده (Inferred Values) .sp در برخی شرایط، مقادیر مشخص‌نشده از سایر داده‌های موجود استنتاج خواهند شد (حتی برای فیلدهای الزامی). .INDENT 0.0 .IP \(bu 2 \fBproject.name\fP <= \fBtool.pyperformance.name\fP .IP \(bu 2 \fBproject.*\fP <= متادیتای ارث‌بری‌شده (به‌جز \(dqname\(dq و \(dqdynamic\(dq) .IP \(bu 2 \fBtool.pyperformance.name\fP <= نام فایل متادیتا .IP \(bu 2 \fBtool.pyperformance.*\fP <= متادیتای ارث‌بری‌شده (به‌جز \(dqname\(dq و \(dqinherits\(dq) .UNINDENT .sp هنگامی که نام از روی نام فایل برای بنچ‌مارکی با ساختار استاندارد استنتاج می‌شود، پیشوند \(dqbm_\(dq از دایرکتوری بنچ‌مارک حذف می‌شود. اگر یک variant باشد، این پیشوند و همچنین پسوند .toml از نام فایل متادیتا حذف می‌گردد. .SS بخش \fB[project]\fP (The [project] Section) .TS box center; l|l|l|l|l|l. T{ فیلد T} T{ نوع T} T{ R T} T{ T T} T{ B T} T{ D T} _ T{ project.name T} T{ str T} T{ X T} T{ X T} T{ T} T{ T} _ T{ project.version T} T{ ver T} T{ X T} T{ T} T{ X T} T{ X T} _ T{ project.dependencies T} T{ [str] T} T{ T} T{ T} T{ X T} T{ T} _ T{ project.dynamic T} T{ [str] T} T{ T} T{ T} T{ T} T{ T} .TE .sp \(dqR\(dq: الزامی (required) \(dqT\(dq: استنتاج‌شده از بخش tool \(dqB\(dq: استنتاج‌شده از متادیتای به ارث برده‌شده \(dqD\(dq: برای بنچ‌مارک‌های پیش‌فرض، استنتاج‌شده از pyperformance .sp بر اساس PEP 621 فیلد \(dqdynamic\(dq زمانی الزامی است که مقداری به صورت پویا توسط ابزار پر شود. این موضوع به‌ویژه برای فیلدهای الزامی حائز اهمیت است. .sp تمام فیلدهای دیگر PEP 621 اختیاری هستند (مانند \fBrequires\-python = \(dq>=3.8\(dq\fP، \fB{repository = \(dqhttps://github.com/...\(dq}\fP)..SS بخش \fB[tool.pyperformance]\fP .TS box center; l|l|l|l|l. T{ فیلد T} T{ نوع T} T{ R T} T{ B T} T{ F T} _ T{ tool.name T} T{ str T} T{ X T} T{ T} T{ X T} _ T{ tool.tags T} T{ [str] T} T{ T} T{ X T} T{ T} _ T{ tool.extra_opts T} T{ [str] T} T{ T} T{ X T} T{ T} _ T{ tool.inherits T} T{ file T} T{ T} T{ T} T{ T} _ T{ tool.runscript T} T{ file T} T{ T} T{ X T} T{ T} _ T{ tool.datadir T} T{ file T} T{ T} T{ X T} T{ T} .TE .sp \(dqR\(dq: الزامی \(dqB\(dq: استنباط‌شده از فراداده‌های به ارث‌رسیده \(dqF\(dq: استنباط‌شده از نام فایل .INDENT 0.0 .IP \(bu 2 tags: فهرستی اختیاری از نام‌ها برای گروه‌بندی بنچمارک‌ها .IP \(bu 2 extra_opts: فهرستی اختیاری از آرگومان‌ها برای ارسال به \fBtool.runscript\fP .IP \(bu 2 runscript: اسکریپت بنچمارک برای استفاده به جای run_benchmark.py. .UNINDENT.SH "نتایج CPYTHON در سال 2017 (CPYTHON RESULTS, 2017)" .sp این صفحه بنچمارک‌هایی را فهرست می‌کند که در CPython سریع‌تر شده‌اند. .SS "بهینه‌سازی‌ها (Optimizations)" .SS "2016\-12\-14: افزایش سرعت فراخوانی متدها (speedup method calls)" .sp بهینه‌سازی: افزایش 1.2 برابری سرعت فراخوانی متدها \%، کامیت f2392133 \%\&. .TS box center; l|l|l. T{ بنچمارک T} T{ 2016\-12\-01 (27580c1fb5e8) T} T{ 2017\-01\-01 (67e1aa0b58be) T} _ T{ call_method T} T{ 14.1 ms T} T{ 11.2 ms: 1.26x سریع‌تر (\-21%) T} _ T{ call_method_slots T} T{ 13.9 ms T} T{ 11.1 ms: 1.25x سریع‌تر (\-20%) T} _ T{ call_method_unknown T} T{ 16.0 ms T} T{ 14.3 ms: 1.12x سریع‌تر (\-11%) T} .TE .SS "2016\-04\-22: تخصیص‌دهنده حافظه pymalloc (pymalloc allocator)" .sp بهینه‌سازی: تابع PyMem_Malloc() اکنون از تخصیص‌دهنده سریع pymalloc استفاده می‌کند \%، کامیت f5c4b990 \%\&. .sp تغییرات دست‌کم 5%: .TS box center; l|l|l. T{ بنچمارک T} T{ 2016\-04\-21 (5439fc4901db) T} T{ 2016\-04\-22 (f5c4b99034fa) T} _ T{ unpickle_list T} T{ 10.4 us T} T{ 7.64 us: 1.36x سریع‌تر (\-27%) T} _ T{ json_dumps T} T{ 28.0 ms T} T{ 25.2 ms: 1.11x سریع‌تر (\-10%) T} _ T{ unpickle_pure_python T} T{ 741 us T} T{ 678 us: 1.09x سریع‌تر (\-9%) T} _ T{ unpickle T} T{ 33.9 us T} T{ 31.3 us: 1.08x سریع‌تر (\-8%) T} _ T{ meteor_contest T} T{ 197 ms T} T{ 183 ms: 1.08x سریع‌تر (\-7%) T} _ T{ mako T} T{ 36.9 ms T} T{ 34.3 ms: 1.07x سریع‌تر (\-7%) T} _ T{ pathlib T} T{ 41.0 ms T} T{ 38.4 ms: 1.07x سریع‌تر (\-6%) T} _ T{ call_method_slots T} T{ 14.8 ms T} T{ 13.9 ms: 1.07x سریع‌تر (\-6%) T} _ T{ telco T} T{ 19.5 ms T} T{ 18.3 ms: 1.07x سریع‌تر (\-6%) T} _ T{ scimark_lu T} T{ 413 ms T} T{ 388 ms: 1.07x سریع‌تر (\-6%) T} _ T{ nqueens T} T{ 221 ms T} T{ 207 ms: 1.07x سریع‌تر (\-6%) T} _ T{ fannkuch T} T{ 937 ms T} T{ 882 ms: 1.06x سریع‌تر (\-6%) T} _ T{ regex_compile T} T{ 319 ms T} T{ 301 ms: 1.06x سریع‌تر (\-6%) T} _ T{ raytrace T} T{ 1.16 sec T} T{ 1.09 sec: 1.06x سریع‌تر (\-5%) T} _ T{ pickle_pure_python T} T{ 1.11 ms T} T{ 1.05 ms: 1.05x سریع‌تر (\-5%) T} _ T{ genshi_text T} T{ 70.1 ms T} T{ 66.6 ms: 1.05x سریع‌تر (\-5%) T} .TE.SS 2015\-12\-07: بهینه‌سازی ElementTree.iterparse()، xml_etree_iterparse .sp بهینه‌سازی: مورد #25638: بهینه‌سازی ElementTree.iterparse()؛ اکنون ۲ برابر سریع‌تر است \%، کامیت 9ec5e25f2 \%\&. .TS box center; l|l|l. T{ بنچ‌مارک T} T{ 2015\-12\-01 (df144092a340) T} T{ 2016\-01\-01 (71db90356390) T} _ T{ xml_etree_iterparse T} T{ 423 ms T} T{ 206 ms: 2.05 برابر سریع‌تر (\-51%) T} .TE .SS 2015\-09\-19: استفاده PGO از مجموعه‌آزمون، pidigits .sp بهینه‌سازی: مورد #24915: افزودن پشتیبانی Clang به ساخت‌های PGO و استفاده از مجموعه‌آزمون برای داده‌های پروفایل \%، کامیت 7188a3ef \%\&. .sp تغییرات دست‌کم ۵٪: .TS box center; l|l|l. T{ بنچ‌مارک T} T{ 2015\-09\-18 (4b363e270108) T} T{ 2015\-09\-18_22\-13 (7188a3efe07b) T} _ T{ pickle T} T{ 33.7 us T} T{ 26.4 us: 1.28 برابر سریع‌تر (\-22%) T} _ T{ pidigits T} T{ 332 ms T} T{ 286 ms: 1.16 برابر سریع‌تر (\-14%) T} _ T{ pickle_list T} T{ 9.90 us T} T{ 8.84 us: 1.12 برابر سریع‌تر (\-11%) T} _ T{ unpickle T} T{ 37.2 us T} T{ 33.3 us: 1.12 برابر سریع‌تر (\-11%) T} _ T{ unpickle_list T} T{ 11.1 us T} T{ 9.95 us: 1.11 برابر سریع‌تر (\-10%) T} _ T{ regex_dna T} T{ 330 ms T} T{ 297 ms: 1.11 برابر سریع‌تر (\-10%) T} _ T{ regex_effbot T} T{ 6.43 ms T} T{ 5.80 ms: 1.11 برابر سریع‌تر (\-10%) T} _ T{ pickle_dict T} T{ 69.3 us T} T{ 64.1 us: 1.08 برابر سریع‌تر (\-8%) T} _ T{ mako T} T{ 39.1 ms T} T{ 36.2 ms: 1.08 برابر سریع‌تر (\-7%) T} _ T{ call_simple T} T{ 12.2 ms T} T{ 11.6 ms: 1.05 برابر سریع‌تر (\-5%) T} _ T{ genshi_xml T} T{ 175 ms T} T{ 166 ms: 1.05 برابر سریع‌تر (\-5%) T} .TE .sp تغییرات دست‌کم ۵٪، متأسفانه دو بنچ‌مارک نیز کندتر شدند: .TS box center; l|l|l. T{ بنچ‌مارک T} T{ 2015\-09\-18_14\-32\-master\-4b363e270108 T} T{ 2015\-09\-18_22\-13\-master\-7188a3efe07b T} _ T{ unpickle_pure_python T} T{ 776 us T} T{ 821 us: 1.06 برابر کندتر (+6%) T} _ T{ regex_v8 T} T{ 49.5 ms T} T{ 52.6 ms: 1.06 برابر کندتر (+6%) T} .TE.SS 2015\-05\-30: پیاده‌سازی C برای collections.OrderedDict، html5lib .sp بهینه‌سازی: گزارش #16991: افزودن پیاده‌سازی C برای collections.OrderedDict \%، کامیت 96c6af9b \%\&. .TS box center; l|l|l. T{ بنچمارک T} T{ 2015\-05\-02 (3b4d30a27bd6) T} T{ 2015\-06\-01 (41874c570cf3) T} _ T{ html5lib T} T{ 285 ms T} T{ 233 ms: 1.23 برابر سریع‌تر (\-19%) T} .TE .SS 2015\-05\-23: پیاده‌سازی C برای functools.lru_cache()، sympy .sp بهینه‌سازی: گزارش #14373: افزودن پیاده‌سازی C برای functools.lru_cache() \%، کامیت 1c858c35 \%\&. .sp تغییرات دست‌کم 5%: .TS box center; l|l|l. T{ بنچمارک T} T{ 2015\-05\-23_19\-15\-master\-c70908558d8e T} T{ 2015\-05\-23_19\-42\-master\-1c858c352b8c T} _ T{ sympy_expand T} T{ 1.45 ثانیه T} T{ 1.14 ثانیه: 1.27 برابر سریع‌تر (\-21%) T} _ T{ sympy_sum T} T{ 308 ms T} T{ 247 ms: 1.25 برابر سریع‌تر (\-20%) T} _ T{ sympy_str T} T{ 621 ms T} T{ 500 ms: 1.24 برابر سریع‌تر (\-19%) T} _ T{ sympy_integrate T} T{ 54.2 ms T} T{ 45.7 ms: 1.19 برابر سریع‌تر (\-16%) T} _ T{ scimark_lu T} T{ 497 ms T} T{ 471 ms: 1.06 برابر سریع‌تر (\-5%) T} .TE .sp \fBpickle_dict\fP حدود 1.06 برابر کندتر دیده شد، اما از آنجا که pickle از functools.lru_cache() استفاده نمی‌کند، این تغییر در جدول نادیده گرفته شده است..SS افت سرعت (Slowdown) .SS 2016\-09\-11: regex_compile .sp افت سرعت: تبدیل پرچم‌های re به ثابت‌های (بسیار کاربرپسندتر) IntFlag (مورد #28082) \%، کامیت f93395bc \%\&. .TS box center; l|l|l|l. T{ بنچمارک T} T{ 2016\-04\-01 (6b6abd4cf10e) T} T{ 2016\-07\-01 (355048970b2a) T} T{ 2016\-10\-01 (78a111c7d867) T} _ T{ regex_compile T} T{ 339 ms T} T{ 309 ms: 1.10x سریع‌تر (\-9%) T} T{ 383 ms: 1.13x کندتر (+13%) T} .TE .SS روند زمانی (Timeline) .SS آوریل ۲۰۱۶ \-> مه ۲۰۱۶ .sp 2016\-04\-01 .. 2016\-05\-01: .TS box center; l|l|l. T{ بنچمارک T} T{ 2016\-04\-01 (dcfebb32e277) T} T{ 2016\-05\-01 (f1e2671fdf88) T} _ T{ nqueens T} T{ 255 ms T} T{ 207 ms: 1.23x سریع‌تر (\-19%) T} _ T{ raytrace T} T{ 1.31 sec T} T{ 1.09 sec: 1.19x سریع‌تر (\-16%) T} _ T{ float T} T{ 290 ms T} T{ 243 ms: 1.19x سریع‌تر (\-16%) T} _ T{ chaos T} T{ 273 ms T} T{ 235 ms: 1.16x سریع‌تر (\-14%) T} _ T{ hexiom T} T{ 21.0 ms T} T{ 18.6 ms: 1.13x سریع‌تر (\-11%) T} _ T{ deltablue T} T{ 16.4 ms T} T{ 14.6 ms: 1.12x سریع‌تر (\-11%) T} _ T{ go T} T{ 557 ms T} T{ 502 ms: 1.11x سریع‌تر (\-10%) T} _ T{ nbody T} T{ 254 ms T} T{ 232 ms: 1.10x سریع‌تر (\-9%) T} .TE.SS call_method .sp خط زمانی 2016\-04\-01 .. 2017\-01\-01: .TS box center; l|l|l|l|l. T{ بنچ‌مارک T} T{ 2016\-04\-01 (6b6abd4cf10e) T} T{ 2016\-07\-01 (355048970b2a) T} T{ 2016\-10\-01 (78a111c7d867) T} T{ 2017\-01\-01 (67e1aa0b58be) T} _ T{ call_method T} T{ 15.8 ms T} T{ 14.9 ms: 1.06 برابر سریع‌تر (\-6%) T} T{ 14.1 ms: 1.13 برابر سریع‌تر (\-11%) T} T{ 11.2 ms: 1.42 برابر سریع‌تر (\-29%) T} _ T{ call_method_slots T} T{ 15.7 ms T} T{ 15.2 ms: 1.03 برابر سریع‌تر (\-3%) T} T{ 14.0 ms: 1.13 برابر سریع‌تر (\-11%) T} T{ 11.1 ms: 1.42 برابر سریع‌تر (\-29%) T} _ T{ call_method_unknown T} T{ 17.7 ms T} T{ 15.9 ms: 1.11 برابر سریع‌تر (\-10%) T} T{ 15.6 ms: 1.13 برابر سریع‌تر (\-11%) T} T{ 14.3 ms: 1.23 برابر سریع‌تر (\-19%) T} .TE .SS crypto_pyaes .TS box center; l|l|l. T{ بنچ‌مارک T} T{ 2016\-04\-01 (master) T} T{ 2016\-05\-01 (master) T} _ T{ crypto_pyaes T} T{ 226 ms T} T{ 205 ms: 1.10 برابر سریع‌تر (\-9%) T} .TE .sp 2016\-03\-01 .. 2016\-06\-01: .TS box center; l|l|l. T{ بنچ‌مارک T} T{ 2016\-03\-01 (13d09afff127) T} T{ 2016\-06\-01 (d80ab7d94578) T} _ T{ crypto_pyaes T} T{ 231 ms T} T{ 199 ms: 1.16 برابر سریع‌تر (\-14%) T} .TE.SS json_loads .sp پیشرفت طی ۲۱ ماه، 2015\-01\-01 .. 2016\-10\-01: .TS box center; l|l|l. T{ بنچمارک T} T{ 2015\-01\-01 (52074ac866eb) T} T{ 2016\-10\-01 (78a111c7d867) T} _ T{ json_loads T} T{ 64.0 us T} T{ 56.6 us: 1.13 برابر سریع‌تر (\-11%) T} .TE .SS logging_silent .TS box center; l|l|l. T{ بنچمارک T} T{ 2016\-01\-01 (899b72cee21c) T} T{ 2016\-07\-01 (355048970b2a) T} _ T{ logging_silent T} T{ 718 ns T} T{ 606 ns: 1.18 برابر سریع‌تر (\-16%) T} .TE .SS pickle .sp pickle،‏ 2016\-08\-02 .. 2016\-09\-08: .TS box center; l|l|l. T{ بنچمارک T} T{ 2016\-08\-02 (133138a284be) T} T{ 2016\-09\-08 (10427f44852b) T} _ T{ pickle T} T{ 25.5 us T} T{ 21.4 us: 1.19 برابر سریع‌تر (\-16%) T} .TE .sp pickle روی dict/list: .TS box center; l|l|l. T{ بنچمارک T} T{ 2016\-04\-01 (6b6abd4cf10e) T} T{ 2016\-10\-01 (78a111c7d867) T} _ T{ pickle_dict T} T{ 64.5 us T} T{ 57.7 us: 1.12 برابر سریع‌تر (\-11%) T} _ T{ pickle_list T} T{ 9.06 us T} T{ 7.79 us: 1.16 برابر سریع‌تر (\-14%) T} .TE .sp unpickle: .TS box center; l|l|l. T{ بنچمارک T} T{ 2015\-07\-01 (d7982beca93c) T} T{ 2015\-10\-01 (30b7138fe12b) T} _ T{ unpickle T} T{ 36.9 us T} T{ 32.8 us: 1.13 برابر سریع‌تر (\-11%) T} .TE.SS python_startup .sp 2015\-04\-01 .. 2015\-10\-01: .TS box center; l|l|l. T{ بنچمارک T} T{ 2015\-04\-01 (4fd929b43121) T} T{ 2015\-10\-01 (30b7138fe12b) T} _ T{ python_startup T} T{ 16.4 ms T} T{ 17.2 ms: 1.05 برابر کندتر (+5%) T} _ T{ python_startup_no_site T} T{ 8.65 ms T} T{ 8.90 ms: 1.03 برابر کندتر (+3%) T} .TE .sp 2016\-04\-01 .. 2017\-01\-01: .TS box center; l|l|l. T{ بنچمارک T} T{ 2016\-04\-01 (6b6abd4cf10e) T} T{ 2017\-01\-01 (67e1aa0b58be) T} _ T{ python_startup T} T{ 17.3 ms T} T{ 14.5 ms: 1.20 برابر سریع‌تر (\-16%) T} _ T{ python_startup_no_site T} T{ 8.89 ms T} T{ 8.39 ms: 1.06 برابر سریع‌تر (\-6%) T} .TE .SS regex_compile .TS box center; l|l|l|l. T{ بنچمارک T} T{ 2016\-04\-01 (6b6abd4cf10e) T} T{ 2016\-07\-01 (355048970b2a) T} T{ 2016\-10\-01 (78a111c7d867) T} _ T{ regex_compile T} T{ 339 ms T} T{ 309 ms: 1.10 برابر سریع‌تر (\-9%) T} T{ 383 ms: 1.13 برابر کندتر (+13%) T} .TE.SS telco .TS box center; l|l|l|l|l|l. T{ بنچمارک T} T{ 2016\-01\-01 (899b72cee21c) T} T{ 2016\-04\-01 (6b6abd4cf10e) T} T{ 2016\-07\-01 (355048970b2a) T} T{ 2016\-10\-01 (78a111c7d867) T} T{ 2017\-03\-31 (cdcac039fb44) T} _ T{ telco T} T{ 19.6 ms T} T{ 19.2 ms: 1.02x سریع‌تر (\-2%) T} T{ 18.3 ms: 1.08x سریع‌تر (\-7%) T} T{ 15.1 ms: 1.30x سریع‌تر (\-23%) T} T{ 13.9 ms: 1.41x سریع‌تر (\-29%) T} .TE .SS scimark .sp 2016\-10\-01 .. 2017\-03\-31: .TS box center; l|l|l|l. T{ بنچمارک T} T{ 2016\-10\-01 (78a111c7d867) T} T{ 2017\-01\-01 (67e1aa0b58be) T} T{ 2017\-03\-31 (cdcac039fb44) T} _ T{ scimark_lu T} T{ 423 ms T} T{ 378 ms: 1.12x سریع‌تر (\-11%) T} T{ 318 ms: 1.33x سریع‌تر (\-25%) T} _ T{ scimark_sor T} T{ 426 ms T} T{ 403 ms: 1.06x سریع‌تر (\-5%) T} T{ 375 ms: 1.14x سریع‌تر (\-12%) T} .TE .SS sqlalchemy_declarative .TS box center; l|l|l. T{ بنچمارک T} T{ 2014\-10\-01 (5a789f7eaf81) T} T{ 2015\-10\-01 (30b7138fe12b) T} _ T{ sqlalchemy_declarative T} T{ 345 ms T} T{ 301 ms: 1.15x سریع‌تر (\-13%) T} .TE.SS sympy .sp 2016\-04\-01 .. 2016\-10\-01: .TS box center; l|l|l|l. T{ معیارسنجی T} T{ 2016\-04\-01 (6b6abd4cf10e) T} T{ 2016\-07\-01 (355048970b2a) T} T{ 2016\-10\-01 (78a111c7d867) T} _ T{ sympy_expand T} T{ 1.10 ثانیه T} T{ 1.01 ثانیه: 1.09 برابر سریع‌تر (\-8%) T} T{ 942 میلی‌ثانیه: 1.17 برابر سریع‌تر (\-14%) T} _ T{ sympy_integrate T} T{ 46.6 میلی‌ثانیه T} T{ 42.9 میلی‌ثانیه: 1.09 برابر سریع‌تر (\-8%) T} T{ 41.2 میلی‌ثانیه: 1.13 برابر سریع‌تر (\-11%) T} _ T{ sympy_sum T} T{ 247 میلی‌ثانیه T} T{ 233 میلی‌ثانیه: 1.06 برابر سریع‌تر (\-6%) T} T{ 199 میلی‌ثانیه: 1.24 برابر سریع‌تر (\-19%) T} _ T{ sympy_str T} T{ 483 میلی‌ثانیه T} T{ 454 میلی‌ثانیه: 1.07 برابر سریع‌تر (\-6%) T} T{ 427 میلی‌ثانیه: 1.13 برابر سریع‌تر (\-12%) T} .TE .SS xml_etree_generate .TS box center; l|l|l|l|l|l. T{ معیارسنجی T} T{ 2015\-04\-01 (4fd929b43121) T} T{ 2015\-07\-01 (d7982beca93c) T} T{ 2015\-10\-01 (30b7138fe12b) T} T{ 2016\-01\-01 (899b72cee21c) T} T{ 2016\-07\-01 (355048970b2a) T} _ T{ xml_etree_generate T} T{ 282 میلی‌ثانیه T} T{ 267 میلی‌ثانیه: 1.06 برابر سریع‌تر (\-5%) T} T{ 256 میلی‌ثانیه: 1.10 برابر سریع‌تر (\-9%) T} T{ 237 میلی‌ثانیه: 1.19 برابر سریع‌تر (\-16%) T} T{ 212 میلی‌ثانیه: 1.33 برابر سریع‌تر (\-25%) T} .TE.SH "تغییرات (CHANGELOG)" .SS "نسخه 1.14.0" .INDENT 0.0 .IP \(bu 2 ارتقای \fBpyperf\fP به 2.10.0 .IP \(bu 2 افزودن بنچمارک ماژول base64 (شامل b64، b32، b16، a85، b85) .IP \(bu 2 افزودن بنچمارک FastAPI HTTP .IP \(bu 2 افزودن بنچمارک تجزیه YAML .IP \(bu 2 رعایت تنظیم rigorous در فایل‌های پیکربندی بنچمارک .UNINDENT .SS "نسخه 1.13.0 (2025\-10\-27)" .INDENT 0.0 .IP \(bu 2 فعال‌سازی مجدد بنچمارک xdsl .IP \(bu 2 حذف کد مربوط به Python 3.7 و نسخه‌های پیشین .IP \(bu 2 به‌روزرسانی‌های CI: * رفع اشکال گردش‌کار ubuntu\-latest * حذف پیکربندی استفاده‌نشده Azure Pipelines * به‌روزرسانی نسخه checkout * راه‌اندازی dependabot * به‌روزرسانی نسخه setup\-python .UNINDENT .SS "نسخه 1.12.0 (2025\-10\-24)" .INDENT 0.0 .IP \(bu 2 افزودن بنچمارک xdsl (اما به‌دلیل یک رگرسیون، به‌صورت پیش‌فرض غیرفعال است) .IP \(bu 2 افزودن شبیه‌سازی nbody جدید با quadtree با استفاده از الگوریتم Barnes Hut .IP \(bu 2 افزودن بنچمارک argparse .IP \(bu 2 افزودن بنچمارک‌های NetworkX .IP \(bu 2 افزودن بنچمارک Sphinx .IP \(bu 2 افزودن بنچمارک ماژول decimal .IP \(bu 2 افزودن بنچمارک توکنایزر BPE .IP \(bu 2 صرف‌نظر از بنچمارک dask در Windows برای Python 3.13 .IP \(bu 2 ارتقای dask[distributed] به 2024.10.1 جهت سازگاری با Windows .IP \(bu 2 ارتقای greenlet به 3.2.4 جهت سازگاری با +3.13 .IP \(bu 2 ارتقای Chameleon به 4.6.0 .IP \(bu 2 ارتقای tornado به 6.5.0 .IP \(bu 2 ارتقای pyperf به 2.9.0 .IP \(bu 2 ارتقای sqlglot به V2 .IP \(bu 2 ارتقای mypy به 1.18.2 .IP \(bu 2 رفع اشکال در بررسی حالت editable .IP \(bu 2 رفع اشکال مدیریت \fB\-\-same\-loops\fP .IP \(bu 2 رفع اشکال: ارسال پرچم‌های \fB\-\-warmup\fP و \fB\-\-timeout\fP به pyperf .IP \(bu 2 افزودن آرگومان خط فرمانی \fB\-V\fP/\fB\-\-version\fP .IP \(bu 2 افزودن آرگومان خط فرمانی \fB\-\-hook\fP .IP \(bu 2 اجرای قالب‌بندی و بررسی ruff تحت pre\-commit و GitHub Actions .IP \(bu 2 افزودن پشتیبانی از ساخت‌های آزمایشی JIT .IP \(bu 2 افزودن CI برای Arm64 .IP \(bu 2 افزودن CI برای Free\-threading .IP \(bu 2 تبدیل Windows به پلتفرم غیرازمایشی در CI .IP \(bu 2 افزودن پشتیبانی از Python 3.14 و حذف پشتیبانی از Python 3.7، 3.8، 3.9 .UNINDENT.SS نسخه 1.11.0 (2024\-03\-09) .INDENT 0.0 .IP \(bu 2 افزودن گزینهٔ \-\-same\-loops به دستور run برای استفاده از دقیقاً همان تعداد حلقه‌های اجرای پیشین (بدون کالیبراسیون مجدد). .IP \(bu 2 ارتقای pyperf به 2.6.3 .IP \(bu 2 اصلاح بنچمارک django_template جهت سازگاری با 3.13 .IP \(bu 2 اصلاح benchmark.conf.sample .UNINDENT .SS نسخه 1.10.0 (2023\-10\-22) .INDENT 0.0 .IP \(bu 2 افزودن بنچمارک برای asyncio_webockets .IP \(bu 2 ارائهٔ گزینهٔ \-\-min\-time از pyperf در رابط خط فرمان (CLI) ابزار pyperformance .IP \(bu 2 ارتقای coverage به 7.3.2 جهت سازگاری با 3.13 .IP \(bu 2 ارتقای greenlet به 3.0.0rc3 جهت سازگاری با 3.13 .UNINDENT .SS نسخه 1.0.9 (2023\-06\-14) .INDENT 0.0 .IP \(bu 2 گنجاندن مستقیم (Vendor) بستهٔ lib2to3 برای Python 3.13+ .IP \(bu 2 افزودن گونه‌های TaskGroups به بنچمارک‌های async_tree .UNINDENT .SS نسخه 1.0.8 (2023\-06\-02) .INDENT 0.0 .IP \(bu 2 انتقال فایل اصلی requirements.txt به pyperformance/requirements تا dependabot تنها روی همان یک فایل اجرا شود .IP \(bu 2 به‌روزرسانی وابستگی‌های بنچمارک‌ها جهت عدم تعیین setuptools .IP \(bu 2 در نسخه‌های قدیمی‌تر Python، نادیده گرفتن بنچمارک‌هایی که از قابلیت‌های معرفی‌شده در نسخه‌های جدیدتر Python استفاده می‌کنند .IP \(bu 2 پشتیبانی از \fB\-\-inherit\-environ\fP هنگام استفادهٔ مجدد از یک venv .IP \(bu 2 استفاده از tomllib/tomli به جای toml .IP \(bu 2 به‌روزرسانی MANIFEST.in جهت گنجاندن فایل‌های گواهی برای بنچمارک asyncio_tcp_ssl .IP \(bu 2 رفع مشکل متغیر تعریف‌نشده هنگام ایجاد خطای VenvPipInstallFailedError .IP \(bu 2 افزودن پیکربندی mypy؛ اجرای mypy در CI .IP \(bu 2 اصلاح غلط املایی str.partition در _pyproject_toml.py .IP \(bu 2 افزودن نسخه‌ای از بنچمارک Richards که از super() استفاده می‌کند .IP \(bu 2 افزودن یک بنچمارک برای پروتکل‌های runtime\-checkable .IP \(bu 2 گسترش بنچمارک‌های async tree جهت پوشش اجرای مشتاقانهٔ (eager) وظایف .UNINDENT .SS نسخه 1.0.7 (2023\-04\-22) .INDENT 0.0 .IP \(bu 2 ارتقای pyperf از 2.5.0 به 2.6.0 .IP \(bu 2 پاک‌سازی importهای بدون استفاده و سایر جزئیات کوچک کد .IP \(bu 2 مهاجرت به پروژهٔ مبتنی بر pyproject.toml .IP \(bu 2 اصلاح بنچمارک django_template به دلیل عدم وجود distutils .IP \(bu 2 افزودن بنچمارک برای toml .IP \(bu 2 افزودن بنچمارک برای comprehensions .IP \(bu 2 افزودن بنچمارک برای asyncio_tcp_ssl .IP \(bu 2 افزودن بنچمارک برای asyncio_tcp .IP \(bu 2 افزودن بنچمارک برای زمان‌بند Dask .IP \(bu 2 افزودن بنچمارک‌های gc به فایل MANIFEST .UNINDENT.SS نسخه 1.0.6 (2022\-11\-20) .INDENT 0.0 .IP \(bu 2 ارتقای pyperf از 2.4.1 به 2.5.0 .IP \(bu 2 افزودن یک بنچمارک برای اندازه‌گیری پیمایش gc .IP \(bu 2 افزودن فیلد jobs در بخش compile جهت تعیین پارامتر make \-j .IP \(bu 2 افزودن بنچمارک برای Docutils .IP \(bu 2 افزودن بنچمارک async_generators .IP \(bu 2 افزودن بنچمارک برای IPC .IP \(bu 2 رفع اشکال Manifest Group .IP \(bu 2 رفع اشکال نصب بیلد توسعه pyperformance درون compile/compile_all .IP \(bu 2 بارگذاری نتایج در هر حالت، حتی در صورت شکست برخی از بنچمارک‌ها .IP \(bu 2 افزودن بنچمارک‌های sqlglot .IP \(bu 2 پشتیبانی از گزارش میانگین هندسی بر اساس برچسب‌ها (tags) .IP \(bu 2 امکان تعیین فایل‌های محلی wheel و sdist به عنوان وابستگی .IP \(bu 2 افزودن یک بنچمارک بر پایه \fIpython \-m pprint\fP .IP \(bu 2 بازگرداندن mdp به گروه پیش‌فرض .IP \(bu 2 افزودن بنچمارک coroutines .IP \(bu 2 کاهش نویز در بنچمارک generators .IP \(bu 2 افزودن بنچمارک برای deepcopy .IP \(bu 2 افزودن بنچمارک coverage .IP \(bu 2 افزودن بنچمارک generators .IP \(bu 2 افزودن بنچمارک برای بارهای کاری درخت ناهمگام (async tree) .IP \(bu 2 پشتیبانی از مسیرهای نسبی به فایل‌های manifest .IP \(bu 2 افزودن پشتیبانی از چندین گروه بنچمارک در یک manifest .IP \(bu 2 رفع اشکال \-\-inherit\-environ .IP \(bu 2 استفاده از نسخه فعال Genshi 0.7.7 .UNINDENT .SS نسخه 1.0.4 (2022\-01\-25) .INDENT 0.0 .IP \(bu 2 انتشار مجدد پشتیبانی از بنچمارک تعریف‌شده توسط کاربر پس از رفع اشکال در محیط‌های مجازی. .UNINDENT .SS نسخه 1.0.3 (2021\-12\-20) .INDENT 0.0 .IP \(bu 2 پشتیبانی از مجموعه‌های بنچمارک تعریف‌شده توسط کاربر. .UNINDENT .SS نسخه 1.0.2 (2021\-05\-11) .INDENT 0.0 .IP \(bu 2 غیرفعال‌سازی موقت بنچمارک henshi به دلیل عدم سازگاری با Python 3.11. .IP \(bu 2 فعال‌سازی مجدد بنچمارک html5lib: نسخه 1.1 html5lib منتشر شده است. .IP \(bu 2 به‌روزرسانی پیش‌نیازها. .IP \(bu 2 جایگزینی Travis CI با GitHub Actions. .IP \(bu 2 شاخه توسعه \fBmaster\fP به \fBmain\fP تغییر نام داد\&. برای بررسی دلایل، به \% مراجعه کنید. .UNINDENT .SS نسخه 1.0.1 (2020\-03\-26) .INDENT 0.0 .IP \(bu 2 حذف استفاده از ماژول six با توجه به توقف پشتیبانی از Python 2. حذف کدهای مختص به Python 2. .IP \(bu 2 به‌روزرسانی وابستگی‌ها: .INDENT 2.0 .IP \(bu 2 django: 3.0 => 3.0.4 .IP \(bu 2 dulwich: 0.19.14 => 0.19.15 .IP \(bu 2 mako: 1.1.0 = > 1.1.2 .IP \(bu 2 mercurial: 5.1.1 => 5.3.1 .IP \(bu 2 psutil: 5.6.7 => 5.7.0 .IP \(bu 2 pyperf: 1.7.0 => 2.0.0 .IP \(bu 2 sqlalchemy: 1.3.12 => 1.3.15 .IP \(bu 2 sympy: 1.5 => 1.5.1 .IP \(bu 2 tornado: 6.0.3 => 6.0.4 .UNINDENT .IP \(bu 2 حذف پیش‌نیازهای six ،html5lib و mercurial. .IP \(bu 2 اکنون از pip\-tools (pip\-compile) برای به‌روزرسانی وابستگی‌ها استفاده می‌شود .UNINDENT.SS نسخه 1.0.0 (2019\-12\-17) .INDENT 0.0 .IP \(bu 2 فعال‌سازی بنچ‌مارک‌های pyflate در Python 3. .IP \(bu 2 حذف بنچ‌مارک \fBspambayes\fP: با Python 3 سازگار نیست. .IP \(bu 2 حذف گروه بنچ‌مارک \fB2n3\fP. .IP \(bu 2 قطع پشتیبانی از Python 2.7: نسخه‌های قدیمی Django و Tornado با Python 3.9 پیش‌رو سازگار نیستند. .IP \(bu 2 غیرفعال‌سازی موقت بنچ‌مارک html5lib، زیرا دیگر با Python 3.9 سازگار نیست. .IP \(bu 2 به‌روزرسانی نیازمندی‌ها: .INDENT 2.0 .IP \(bu 2 Django: 1.11.22 => 3.0 .IP \(bu 2 Mako: 1.0.14 => 1.1.0 .IP \(bu 2 SQLAlchemy: 1.3.6 => 1.3.12 .IP \(bu 2 certifi: 2019.6.16 => 2019.11.28 .IP \(bu 2 docutils: 0.15.1 => 0.15.2 .IP \(bu 2 dulwich: 0.19.11 => 0.19.14 .IP \(bu 2 mercurial: 5.0.2 => 5.1.1 .IP \(bu 2 psutil: 5.6. => 5.6.7 .IP \(bu 2 pyperf: 1.6.1 => 1.7.0 .IP \(bu 2 six: 1.12. => 1.13.0 .IP \(bu 2 sympy: 1.4 => 1.5 .UNINDENT .UNINDENT .SS نسخه 0.9.1 (2019\-07\-29) .INDENT 0.0 .IP \(bu 2 فعال‌سازی hg_startup در Python 3 .IP \(bu 2 رفع مشکل سازگاری با Python 3.8 beta 2 .IP \(bu 2 به‌روزرسانی نیازمندی‌ها: .INDENT 2.0 .IP \(bu 2 certifi: 2019.3.9 => 2019.6.16 .IP \(bu 2 Chameleon: 3.6.1 => 3.6.2 .IP \(bu 2 Django: 1.11.20 => 1.11.22 .IP \(bu 2 docutils: 0.14 => 0.15.1.post1 .IP \(bu 2 Mako: 1.0.10 => 1.0.14 .IP \(bu 2 mercurial: 5.0 => 5.0.2 .IP \(bu 2 pathlib2: 2.3.3 => 2.3.4 .IP \(bu 2 psutil: 5.6.2 => 5.6.3 .IP \(bu 2 SQLAlchemy: 1.3.4 => 1.3.6 .UNINDENT .UNINDENT .SS نسخه 0.9.0 (2019\-05\-29) .INDENT 0.0 .IP \(bu 2 تغییر نام پروژه از \(dqperformance\(dq به \(dqpyperformance\(dq .IP \(bu 2 ارتقای pyperf از نسخه 1.6.0 به 1.6.1. پروژه از \(dqperf\(dq به \(dqpyperf\(dq تغییر نام یافته است. به‌روزرسانی importها. .IP \(bu 2 گزارش #54: به‌روزرسانی Genshi به 0.7.3. اکنون با Python 3.8 سازگار است. .IP \(bu 2 به‌روزرسانی نیازمندی‌ها: .INDENT 2.0 .IP \(bu 2 Mako: 1.0.9= > 1.0.10 .IP \(bu 2 SQLAlchemy: 1.3.3 => 1.3.4 .UNINDENT .UNINDENT.SS نسخه 0.8.0 (2019\-05\-10) .INDENT 0.0 .IP \(bu 2 دستور compile: افزودن گزینه \(dqpkg_only\(dq به benchmark.conf. افزودن پشتیبانی از کتابخانه‌های بومی که نصب شده‌اند اما در path قرار ندارند. وصله توسط Robert Grimm. .IP \(bu 2 به‌روزرسانی پیکربندی Travis: استفاده از تصویر trusty، استفاده از کَش pip. وصله توسط Inada Naoki. .IP \(bu 2 ارتقای tornado به 5.1.1. وصله توسط Inada Naoki. .IP \(bu 2 رفع اشکال دستور compile در Mac OS: عدم وجود پسوند برنامه. وصله توسط Anthony Shaw. .IP \(bu 2 به‌روزرسانی نیازمندی‌ها: .INDENT 2.0 .IP \(bu 2 Chameleon: 3.4 => 3.6.1 .IP \(bu 2 Django: 1.11.16 => 1.11.20 .IP \(bu 2 Genshi: 0.7.1 => 0.7.2 .IP \(bu 2 Mako: 1.0.7 => 1.0.9 .IP \(bu 2 MarkupSafe: 1.0 => 1.1.1 .IP \(bu 2 SQLAlchemy: 1.2.12 => 1.3.3 .IP \(bu 2 certifi: 2018.10.15 => 2019.3.9 .IP \(bu 2 dulwich: 0.19.6 => 0.19.11 .IP \(bu 2 mercurial: 4.7.2 => 5.0 .IP \(bu 2 mpmath: 1.0.0 => 1.1.0 .IP \(bu 2 pathlib2: 2.3.2 => 2.3.3 .IP \(bu 2 perf: 1.5.1 => 1.6.0 .IP \(bu 2 psutil: 5.4.7 => 5.6.2 .IP \(bu 2 six: 1.11.0 => 1.12.0 .IP \(bu 2 sympy: 1.3 => 1.4 .IP \(bu 2 tornado: 4.5.3 => 5.1.1 .UNINDENT .UNINDENT .SS نسخه 0.7.0 (2018\-10\-16) .INDENT 0.0 .IP \(bu 2 python_startup: افزودن گزینه \fB\-\-exit\fP. .IP \(bu 2 به‌روزرسانی نیازمندی‌ها: .INDENT 2.0 .IP \(bu 2 certifi: 2017.11.5 => 2018.10.15 .IP \(bu 2 Chameleon: 3.2 => 3.4 .IP \(bu 2 Django: 1.11.9 => 1.11.16 .IP \(bu 2 dulwich: 0.18.6 => 0.19.6 .IP \(bu 2 Genshi: 0.7 => 0.7.1 .IP \(bu 2 mercurial: 4.4.2 => 4.7.2 .IP \(bu 2 pathlib2: 2.3.0 => 2.3.2 .IP \(bu 2 psutil: 5.4.3 => 5.4.7 .IP \(bu 2 SQLAlchemy: 1.2.0 => 1.2.12 .IP \(bu 2 sympy: 1.1.1 => 1.3 .UNINDENT .IP \(bu 2 رفع اشکال #40 برای pip 10 و جدیدتر: حذف وابستگی‌های غیرمستقیم. از وابستگی‌های غیرمستقیم برای نصب cffi استفاده می‌شد، اما Mercurial 4.0 دیگر به cffi وابسته نیست. .UNINDENT.SS نسخه 0.6.1 (2018\-01\-11) .INDENT 0.0 .IP \(bu 2 رفع مشکل inherit\-environ: انتشار به فراخوانی‌های بازگشتی \fBperformance\fP در دستورهای \fBcompile\fP و \fBcompile_all\fP\&. .IP \(bu 2 رفع باگ گزینهٔ \fB\-\-track\-memory\fP به لطف به‌روزرسانی به perf 1.5. .IP \(bu 2 به‌روزرسانی پیش‌نیازها .INDENT 2.0 .IP \(bu 2 certifi: 2017.4.17 => 2017.11.5 .IP \(bu 2 Chameleon: 3.1 => 3.2 .IP \(bu 2 Django: 1.11.3 => 1.11.9 .IP \(bu 2 docutils: 0.13.1 => 0.14 .IP \(bu 2 dulwich: 0.17.3 => 0.18.6 .IP \(bu 2 html5lib: 0.999999999 => 1.0.1 .IP \(bu 2 Mako: 1.0.6 => 1.0.7 .IP \(bu 2 mercurial: 4.2.2 => 4.4.2 .IP \(bu 2 mpmath: 0.19 => 1.0.0 .IP \(bu 2 perf: 1.4 => 1.5.1 (رفع مشکل گزینهٔ \fB\-\-track\-memory\fP) .IP \(bu 2 psutil: 5.2.2 => 5.4.3 .IP \(bu 2 pyaes: 1.6.0 => 1.6.1 .IP \(bu 2 six: 1.10.0 => 1.11.0 .IP \(bu 2 SQLAlchemy: 1.1.11 => 1.2.0 .IP \(bu 2 sympy: 1.0 => 1.1.1 .IP \(bu 2 tornado: 4.5.1 => 4.5.3 .UNINDENT .UNINDENT .SS نسخه 0.6.0 (2017\-07\-06) .INDENT 0.0 .IP \(bu 2 تغییر \fBwarn\fP به \fBwarning\fP در \fIbm_logging.py\fP\&. در Python 3، متد Logger.warn() برای ثبت هشدار منسوخ‌شدگی، warnings.warn() را فراخوانی می‌کند، بنابراین نسبت به Logger.warning() کندتر است. .IP \(bu 2 افزودن دوبارهٔ مجموعه ریزبنچ‌مارک‌های \fBlogging_silent\fP\&. .IP \(bu 2 دستور compile: به‌روزرسانی مخزن Git پیش از دریافت revision. .IP \(bu 2 به‌روزرسانی پیش‌نیازها .INDENT 2.0 .IP \(bu 2 perf: 1.3 => 1.4 (رفع مشکل parse_cpu_list(): حذف نویسه‌های NUL نیز انجام می‌شود) .IP \(bu 2 Django: 1.11.1 => 1.11.3 .IP \(bu 2 mercurial: 4.2 => 4.2.2 .IP \(bu 2 pathlib2: 2.2.1 => 2.3.0 .IP \(bu 2 SQLAlchemy: 1.1.10 => 1.1.11 .UNINDENT .UNINDENT .SS نسخه 0.5.5 (2017\-05\-29) .INDENT 0.0 .IP \(bu 2 در شاخهٔ 2.x در CPython، اکنون \fBcompile\fP گزینهٔ \fB\-\-enable\-unicode=ucs4\fP را روی تمام پلتفرم‌ها به اسکریپت \fBconfigure\fP ارسال می‌کند، به جز در Windows که به دلیل wchar_t شانزده بیتی از UTF\-16 استفاده می‌کند. .IP \(bu 2 بنچ‌مارک \fBfloat\fP اکنون از \fB__slots__\fP در کلاس \fBPoint\fP استفاده می‌کند. .IP \(bu 2 حذف ریزبنچ‌مارک‌های زیر. آن‌ها به پروژهٔ pymicrobench \% منتقل شده‌اند زیرا بسیار کوتاه‌اند، نمایندهٔ برنامه‌های واقعی نیستند و بیش از حد ناپایدارند. .INDENT 2.0 .IP \(bu 2 مجموعه ریزبنچ‌مارک \fBpybench\fP .IP \(bu 2 \fBcall_simple\fP .IP \(bu 2 \fBcall_method\fP .IP \(bu 2 \fBcall_method_unknown\fP .IP \(bu 2 \fBcall_method_slots\fP .IP \(bu 2 \fBlogging_silent\fP: مقادیر در PyPy با 2^27 حلقه سریع‌تر از 1 ns هستند! (و حدود 0.7 us در CPython) .UNINDENT .IP \(bu 2 به‌روزرسانی پیش‌نیازها .INDENT 2.0 .IP \(bu 2 Django: 1.11 => 1.11.1 .IP \(bu 2 SQLAlchemy: 1.1.9 => 1.1.10 .IP \(bu 2 certifi: 2017.1.23 => 2017.4.17 .IP \(bu 2 perf: 1.2 => 1.3 .IP \(bu 2 mercurial: 4.1.2 => 4.2 .IP \(bu 2 tornado: 4.4.3 => 4.5.1 .UNINDENT .UNINDENT.SS "نسخه 0.5.4 (2017\-04\-10)" .INDENT 0.0 .IP \(bu 2 ایجاد مستندات جدید در: \% .IP \(bu 2 افزودن \(dqCPython results, 2017\(dq به مستندات: تغییرات عملکردی چشمگیر، بهینه‌سازی‌های قابل‌توجه، خط زمانی، و غیره. .IP \(bu 2 دستور \fBshow\fP دیگر نیازی به ساخت یک virtual env ندارد. .IP \(bu 2 افزودن دستورهای جدید: .INDENT 2.0 .IP \(bu 2 \fBpyperformance compile\fP: کامپایل، نصب و اجرای بنچمارک .IP \(bu 2 \fBpyperformance compile_all\fP: اجرای بنچمارک روی شاخه‌ها و بازبینی‌های (revisions) متعدد Python .IP \(bu 2 \fBpyperformance upload\fP: بارگذاری یک فایل JSON در Codespeed .UNINDENT .IP \(bu 2 setup.py: افزودن وابستگی‌ها به ماژول‌های \fBperf\fP و \fBsix\fP. .IP \(bu 2 اکنون bm_xml_etree در صورت غیرفعال بودن صریح شتاب‌دهنده، از \(dq_pure_python\(dq در نام‌های بنچمارک استفاده می‌کند. .IP \(bu 2 ارتقای پیش‌نیازها: .INDENT 2.0 .IP \(bu 2 Django: 1.10.6 \-> 1.11 .IP \(bu 2 SQLAlchemy: 1.1.6 \-> 1.1.9 .IP \(bu 2 mercurial: 4.1.1 \-> 4.1.2 .IP \(bu 2 perf: 1.1 => 1.2 .IP \(bu 2 psutil: 5.2.1 \-> 5.2.2 .IP \(bu 2 tornado: 4.4.2 \-> 4.4.3 .IP \(bu 2 webencodings: 0.5 \-> 0.5.1 .UNINDENT .IP \(bu 2 ابزار perf 1.2 اکنون تعداد مراحل آماده‌سازی اولیه (warmups) را روی PyPy کالیبره می‌کند. .IP \(bu 2 در Python 3.5a0: اجبار به استفاده از pip 7.1.2 و setuptools 18.5: \% .UNINDENT .SS "نسخه 0.5.3 (2017\-03\-27)" .INDENT 0.0 .IP \(bu 2 ارتقای Dulwich به 0.17.3 برای پشتیبانی از نسخه‌های PyPy قدیمی‌تر از 5.6: ببینید: \% .IP \(bu 2 رفع هشدارهای ResourceWarning: بستن صریح فایل‌ها و سوکت‌ها. .IP \(bu 2 اسکریپت‌ها: جایگزینی دستورهای Mercurial با دستورهای Git. .IP \(bu 2 ارتقای پیش‌نیازها: .INDENT 2.0 .IP \(bu 2 dulwich: 0.17.1 => 0.17.3 .IP \(bu 2 perf: 1.0 => 1.1 .IP \(bu 2 psutil: 5.2.0 => 5.2.1 .UNINDENT .UNINDENT .SS "نسخه 0.5.2 (2017\-03\-17)" .INDENT 0.0 .IP \(bu 2 ارتقای پیش‌نیازها: .INDENT 2.0 .IP \(bu 2 certifi: 2016.9.26 => 2017.1.23 .IP \(bu 2 Chameleon: 3.0 => 3.1 .IP \(bu 2 Django: 1.10.5 => 1.10.6 .IP \(bu 2 MarkupSafe: 0.23 => 1.0 .IP \(bu 2 dulwich: 0.16.3 => 0.17.1 .IP \(bu 2 mercurial: 4.0.2 => 4.1.1 .IP \(bu 2 pathlib2: 2.2.0 => 2.2.1 .IP \(bu 2 perf: 0.9.3 => 1.0 .IP \(bu 2 psutil: 5.0.1 => 5.2.0 .IP \(bu 2 SQLAlchemy: 1.1.4 => 1.1.6 .UNINDENT .UNINDENT.SS نسخه 0.5.1 (2017\-01\-16) .INDENT 0.0 .IP \(bu 2 اصلاح پشتیبانی از Windows (ارتقای perf از 0.9.0 به 0.9.3) .IP \(bu 2 ارتقای نیازمندی‌ها: .INDENT 2.0 .IP \(bu 2 Chameleon: 2.25 => 3.0 .IP \(bu 2 Django: 1.10.3 => 1.10.5 .IP \(bu 2 docutils: 0.12 => 0.13.1 .IP \(bu 2 dulwich: 0.15.0 => 0.16.3 .IP \(bu 2 mercurial: 4.0.0 => 4.0.2 .IP \(bu 2 perf: 0.9.0 => 0.9.3 .IP \(bu 2 psutil: 5.0.0 => 5.0.1 .UNINDENT .UNINDENT .SS نسخه 0.5.0 (2016\-11\-16) .INDENT 0.0 .IP \(bu 2 افزودن بنچ‌مارک \fBmdp\fP: نبرد با خسارات و مرتب‌سازی توپولوژیکی گره‌ها در یک گراف .IP \(bu 2 گروه بنچ‌مارک \fBdefault\fP اکنون شامل تمام بنچ‌مارک‌ها به‌جز \fBpybench\fP است .IP \(bu 2 در صورت شکست یک بنچ‌مارک، خطا ثبت شده، اجرای بنچ‌مارک‌های بعدی ادامه می‌یابد، اما با کد خطای 1 خارج می‌شود. .IP \(bu 2 حذف بنچ‌مارک‌های منسوخ‌شده: \fBthreading_threaded_count\fP و \fBthreading_iterative_count\fP\&. به‌هر‌حال امکان اجرای آن‌ها وجود نداشت. .IP \(bu 2 نیازمندی \fBdulwich\fP اکنون اختیاری است زیرا نصب آن روی Windows با شکست مواجه می‌شود. .IP \(bu 2 ارتقای نیازمندی‌ها: .INDENT 2.0 .IP \(bu 2 Mako: 1.0.5 => 1.0.6 .IP \(bu 2 Mercurial: 3.9.2 => 4.0.0 .IP \(bu 2 SQLAlchemy: 1.1.3 => 1.1.4 .IP \(bu 2 backports\-abc: 0.4 => 0.5 .UNINDENT .UNINDENT .SS نسخه 0.4.0 (2016\-11\-07) .INDENT 0.0 .IP \(bu 2 افزودن بنچ‌مارک \fBsqlalchemy_imperative\fP: به‌درستی ثبت نشده بود .IP \(bu 2 دستور \fBlist\fP اکنون تنها بنچ‌مارک‌هایی را فهرست می‌کند که دستور \fBrun\fP اجرا خواهد کرد. دستور \fBlist\fP یک گزینه جدید \fB\-b/\-\-benchmarks\fP دریافت می‌کند. .IP \(bu 2 بازنویسی کدی که محیط مجازی را ایجاد می‌کند تا pip را به‌درستی بیازماید. دانلود و اجرای \fBget\-pip.py\fP در صورت ناموفق بودن نصب pip. .IP \(bu 2 ارتقای نیازمندی‌ها: .INDENT 2.0 .IP \(bu 2 perf: 0.8.2 => 0.9.0 .IP \(bu 2 Django: 1.10.2 => 1.10.3 .IP \(bu 2 Mako: 1.0.4 => 1.0.5 .IP \(bu 2 psutil: 4.3.1 => 5.0.0 .IP \(bu 2 SQLAlchemy: 1.1.2 => 1.1.3 .UNINDENT .IP \(bu 2 حذف وابستگی \fBvirtualenv\fP .UNINDENT .SS نسخه 0.3.2 (2016\-10\-19) .INDENT 0.0 .IP \(bu 2 اصلاح setup.py: گنجاندن \fBperformance/benchmarks/data/asyncio.git/\fP نیز .UNINDENT.SS "نسخه 0.3.1 (2016\-10\-19)" .INDENT 0.0 .IP \(bu 2 افزودن بنچمارک \fBregex_dna\fP .IP \(bu 2 دستور \fBrun\fP اکنون در صورتی که هیچ بنچمارکی اجرا نشود با خطا متوقف می‌شود. .IP \(bu 2 اسکریپت‌های genshi، logging، scimark، sympy و xml_etree اکنون به‌طور پیش‌فرض تمام زیر\-بنچمارک‌ها را اجرا می‌کنند .IP \(bu 2 بازنویسی pybench با استفاده از perf: حذف کدهای قدیمی و موروثی برای کالیبره‌سازی و اجرای بنچمارک‌ها، استفاده مجدد از API مربوط به perf.Runner. .IP \(bu 2 تغییر روش ابتکاری (heuristic) برای ساخت محیط مجازی؛ دستورهای بررسی‌شده: .INDENT 2.0 .IP \(bu 2 \fBpython \-m venv\fP .IP \(bu 2 \fBpython \-m virtualenv\fP .IP \(bu 2 \fBvirtualenv \-p python\fP .UNINDENT .IP \(bu 2 فرآیند ساخت محیط مجازی اکنون برای شناسایی \(dqpython3 \-m venv\(dq که pip را نصب نمی‌کند، از کارکرد صحیح pip اطمینان حاصل می‌کند. .IP \(bu 2 ارتقای وابستگی perf از 0.7.12 به 0.8.2: به‌روزرسانی تمام بنچمارک‌ها به رابط برنامه‌نویسی (API) جدید perf 0.8 (که تغییرات ناسازگاری به همراه دارد) .IP \(bu 2 به‌روزرسانی SQLAlchemy از 1.1.1 به 1.1.2 .UNINDENT .SS "نسخه 0.3.0 (2016\-10\-11)" .sp بنچمارک‌های جدید: .INDENT 0.0 .IP \(bu 2 افزودن \fBcrypto_pyaes\fP: بنچمارک پیاده‌سازی پایتون خالص از رمز قالبی AES در حالت CTR با استفاده از ماژول pyaes (نسخه 1.6.0). افزودن وابستگی \fBpyaes\fP. .IP \(bu 2 افزودن \fBsympy\fP: بنچمارک روی SymPy. افزودن وابستگی \fBscipy\fP. .IP \(bu 2 افزودن بنچمارک \fBscimark\fP .IP \(bu 2 افزودن \fBdeltablue\fP: بنچمارک DeltaBlue .IP \(bu 2 افزودن \fBdulwich_log\fP: پیمایش روی کامیت‌های مخزن گیت asyncio با استفاده از ماژول Dulwich. افزودن وابستگی‌های \fBdulwich\fP (و \fBmpmath\fP). .IP \(bu 2 افزودن \fBpyflate\fP: بنچمارک Pyflate، بازکننده فشرده‌سازی tar/bzip2 در پایتون خالص .IP \(bu 2 افزودن بنچمارک \fBsqlite_synth\fP: بنچمارک توابع تجمیعی پایتون برای SQLite .IP \(bu 2 افزودن بنچمارک \fBgenshi\fP: رندر قالب به XML یا متن ساده با استفاده از ماژول Genshi. افزودن وابستگی \fBGenshi\fP. .IP \(bu 2 افزودن بنچمارک‌های \fBsqlalchemy_declarative\fP و \fBsqlalchemy_imperative\fP: بنچمارک‌های Declarative و Imperative در SQLAlchemy با استفاده از SQLite. افزودن وابستگی \fBSQLAlchemy\fP. .UNINDENT .sp بهبودها: .INDENT 0.0 .IP \(bu 2 دستور \fBcompare\fP اکنون در صورت تفاوت در نسخه‌های performance با خطا مواجه می‌شود .IP \(bu 2 \fBnbody\fP: افزودن گزینه‌های خط فرمان \fB\-\-reference\fP و \fB\-\-iterations\fP. .IP \(bu 2 \fBchaos\fP: افزودن گزینه‌های خط فرمان \fB\-\-width\fP، \fB\-\-height\fP، \fB\-\-thickness\fP، \fB\-\-filename\fP و \fB\-\-rng\-seed\fP .IP \(bu 2 \fBdjango_template\fP: افزودن گزینه خط فرمان \fB\-\-table\-size\fP .IP \(bu 2 \fBjson_dumps\fP: افزودن گزینه خط فرمان \fB\-\-cases\fP .IP \(bu 2 \fBpidigits\fP: افزودن گزینه خط فرمان \fB\-\-digits\fP .IP \(bu 2 \fBraytrace\fP: افزودن گزینه‌های خط فرمان \fB\-\-width\fP، \fB\-\-height\fP و \fB\-\-filename\fP .IP \(bu 2 پورت کردن بنچمارک \fBhtml5lib\fP به Python 3 .IP \(bu 2 فعال‌سازی \fBpickle_pure_python\fP و \fBunpickle_pure_python\fP روی Python 3 (کد از پیش با Python 3 سازگار بود) .IP \(bu 2 ساخت محیط مجازی دیگر به‌طور پیش‌فرض متغیرهای محیطی (به‌ویژه \fBPYTHONPATH\fP) را به ارث نمی‌برد: اکنون باید صریحاً از گزینه خط فرمان \fB\-\-inherit\-environ\fP استفاده شود. .UNINDENT .sp رفع باگ‌ها: .INDENT 0.0 .IP \(bu 2 بنچمارک \fBchaos\fP اکنون در هر نمونه، ماژول \fBrandom\fP را نیز بازنشانی می‌کند تا نتایج بنچمارک تکرارپذیرتر باشند .IP \(bu 2 بنچمارک‌های Logging اکنون پیش از هر اجرای بنچمارک، جریان درون‌حافظه‌ای را کوتاه (truncate) می‌کنند .UNINDENT .sp تغییر نام بنچمارک‌ها: .INDENT 0.0 .IP \(bu 2 تغییر نام بنچمارک‌ها برای دستیابی به نامی یکپارچه میان خط فرمان و نام بنچمارک در فایل JSON. .IP \(bu 2 تغییر نام بنچمارک‌های pickle: .INDENT 2.0 .INDENT 3.5 .INDENT 0.0 .IP \(bu 2 \fBslowpickle\fP به \fBpickle_pure_python\fP تبدیل شد .IP \(bu 2 \fBslowunpickle\fP به \fBunpickle_pure_python\fP تبدیل شد .IP \(bu 2 \fBfastpickle\fP به \fBpickle\fP تبدیل شد .IP \(bu 2 \fBfastunpickle\fP به \fBunpickle\fP تبدیل شد .UNINDENT .UNINDENT .UNINDENT .UNINDENT .INDENT 0.0 .INDENT 3.5 .INDENT 0.0 .IP \(bu 2 تغییر نام بنچمارک‌های ElementTree: جایگزینی پیشوند \fBetree_\fP با \fBxml_etree_\fP\&. .IP \(bu 2 تغییر نام \fBhexiom2\fP به \fBhexiom_level25\fP و ارسال صریح پارامتر \fB\-\-level=25\fP .IP \(bu 2 تغییر نام \fBjson_load\fP به \fBjson_loads\fP .IP \(bu 2 تغییر نام \fBjson_dump_v2\fP به \fBjson_dumps\fP (و حذف بنچمارک منسوخ‌شده \fBjson_dump\fP) .IP \(bu 2 تغییر نام \fBnormal_startup\fP به \fBpython_startup\fP، و \fBstartup_nosite\fP به \fBpython_startup_no_site\fP .IP \(bu 2 تغییر نام \fBthreaded_count\fP به \fBthreading_threaded_count\fP، تغییر نام \fBiterative_count\fP به \fBthreading_iterative_count\fP .IP \(bu 2 تغییر نام بنچمارک‌های logging: .INDENT 2.0 .IP \(bu 2 \fBsilent_logging\fP به \fBlogging_silent\fP .IP \(bu 2 \fBsimple_logging\fP به \fBlogging_simple\fP .IP \(bu 2 \fBformatted_logging\fP به \fBlogging_format\fP .UNINDENT .UNINDENT .UNINDENT .UNINDENT .sp تغییرات جزئی: .INDENT 0.0 .IP \(bu 2 به‌روزرسانی وابستگی‌ها .IP \(bu 2 حذف گزینه خط فرمان خراب \fB\-\-args\fP. .UNINDENT.SS نسخه 0.2.2 (2016\-09\-19) .INDENT 0.0 .IP \(bu 2 افزودن دستور جدید \fBshow\fP برای نمایش یک فایل بنچ‌مارک .IP \(bu 2 مسئلهٔ #11: نمایش نسخهٔ Python در compare. همچنین نمایش نسخهٔ performance. .IP \(bu 2 مسئلهٔ CPython شماره #26383؛ خروجی csv: ارقام برای زمان‌بندی‌های کوتاه‌تر از 1 us بریده نمی‌شوند .IP \(bu 2 دستور compare: استفاده از واحد نمونه‌های بنچ‌مارک، قالب‌بندی مقادیر در جدول خروجی با استفاده از این واحد .IP \(bu 2 دستور compare: اصلاح خروجی جدول در صورتی که بنچ‌مارک‌ها فقط شامل یک نمونه باشند .IP \(bu 2 حذف گزینه‌های استفاده‌نشدهٔ \-C/\-\-control_label و \-E/\-\-experiment_label .IP \(bu 2 به‌روزرسانی وابستگی perf به 0.7.11 برای دسترسی به Benchmark.get_unit() و BenchmarkSuite.get_metadata() .UNINDENT .SS نسخه 0.2.1 (2016\-09\-10) .INDENT 0.0 .IP \(bu 2 افزودن گزینهٔ \fB\-\-csv\fP به دستور \fBcompare\fP .IP \(bu 2 اصلاح قالب خروجی \fBcompare \-O table\fP .IP \(bu 2 تثبیت وابستگی‌های غیرمستقیم در requirements.txt .IP \(bu 2 دستور \fBrun\fP: افزودن گزینهٔ \fB\-\-track\-memory\fP برای ردیابی حداکثر حافظهٔ مصرفی .IP \(bu 2 به‌روزرسانی وابستگی perf به 0.7.8 جهت پشتیبانی از ردیابی حافظه و گزینهٔ خط فرمان جدید \fB\-\-inherit\-environ\fP .IP \(bu 2 در صورت شکست دستور \fBvirtualenv\fP، تلاش با دستوری دیگر برای ساخت محیط مجازی: مدیریت خطای \fBvirtualenv\fP .IP \(bu 2 نخستین دستور برای ارتقای pip به نسخهٔ \fB>= 6.0\fP اکنون به‌جای \fBpython \-m pip\fP از باینری \fBpip\fP استفاده می‌کند تا از pip 1.0 که از واسط خط فرمان \fBpython \-m pip\fP پشتیبانی نمی‌کند، پشتیبانی شود. .IP \(bu 2 به‌روزرسانی Django (1.10.1)، Mercurial (3.9.1) و psutil (4.3.1) .IP \(bu 2 تغییر نام گزینهٔ خط فرمان \fB\-\-inherit_env\fP به \fB\-\-inherit\-environ\fP و اصلاح آن .UNINDENT .SS نسخه 0.2 (2016\-09\-01) .INDENT 0.0 .IP \(bu 2 به‌روزرسانی وابستگی Django به 1.10 .IP \(bu 2 به‌روزرسانی وابستگی Chameleon به 2.24 .IP \(bu 2 افزودن گزینهٔ خط فرمان \fB\-\-venv\fP .IP \(bu 2 تبدیل بنچ‌مارک‌های راه‌اندازی Python، راه‌اندازی Mercurial و 2to3 به اسکریپت‌های perf (شامل bm_startup.py، bm_hg_startup.py و bm_2to3.py) .IP \(bu 2 ارسال گزینهٔ \fB\-\-affinity\fP به اسکریپت‌های perf به‌جای استفاده از دستور \fBtaskset\fP .IP \(bu 2 قرار دادن نیازمندی‌های نصاب و اختیاری بیشتری در \fBperformance/requirements.txt\fP .IP \(bu 2 فایل‌های کش‌شدهٔ \fB\&.pyc\fP دیگر پیش از اجرای یک بنچ‌مارک حذف نمی‌شوند. در صورت نیاز از دستور \fBvenv recreate\fP برای به‌روزرسانی محیط مجازی استفاده کنید. .IP \(bu 2 گزینهٔ معیوب \fB\-\-track_memory\fP حذف شد. این گزینه پس از رفع مشکل دوباره بازگردانده خواهد شد. .IP \(bu 2 افزودن نسخهٔ performance به فراداده‌ها .IP \(bu 2 ارتقای وابستگی perf به 0.7.5 برای دریافت \fBBenchmark.update_metadata()\fP .UNINDENT .SS نسخه 0.1.2 (2016\-08\-27) .INDENT 0.0 .IP \(bu 2 اکنون از Windows پشتیبانی می‌شود .IP \(bu 2 افزودن دستور جدید \fBvenv\fP برای نمایش، ساخت، ساخت مجدد یا حذف محیط مجازی. .IP \(bu 2 اصلاح بنچ‌مارک pybench (به‌روزرسانی به رابط برنامه‌نویسی perf 0.7.4) .IP \(bu 2 اکنون performance تلاش می‌کند تا ماژول \fBpsutil\fP را روی CPython نصب کند تا معیارهای سیستمی بهتری در فراداده‌ها و سنجاق کردن پردازنده (CPU pinning) در Python 2 فراهم شود. .IP \(bu 2 فرایند ایجاد محیط مجازی اکنون علاوه بر دستور virtualenv، ماژول‌های پایتون \fBvirtualenv\fP و \fBvenv\fP را نیز امتحان می‌کند. .IP \(bu 2 نسخهٔ در حال توسعهٔ performance اکنون performance را با \(dqpip install \-e \(dq نصب می‌کند .IP \(bu 2 نام پروژهٔ GitHub از \fBpython/benchmarks\fP به \fBpython/performance\fP تغییر یافت\&. .UNINDENT.SS نسخه 0.1.1 (2016\-08\-24) .INDENT 0.0 .IP \(bu 2 رفع اشکال در ایجاد محیط مجازی (virtual environment) .IP \(bu 2 تغییر نام اسکریپت pybenchmarks به pyperformance .IP \(bu 2 افزودن گزینه خط فرمان \-p/\-\-python .IP \(bu 2 افزودن ماژول __main__ برای امکان اجرای: python3 \-m performance .UNINDENT .SS نسخه 0.1 (2016\-08\-24) .INDENT 0.0 .IP \(bu 2 نخستین انتشار پس از تبدیل به ماژول perf و انتقال به GitHub .IP \(bu 2 بنچمارک‌های حذف‌شده .INDENT 2.0 .IP \(bu 2 django_v2, django_v3 .IP \(bu 2 rietveld .IP \(bu 2 spitfire (و psyco): بسته Spitfire در PyPI موجود نیست .IP \(bu 2 pystone .IP \(bu 2 gcbench .IP \(bu 2 tuple_gc_hell .UNINDENT .UNINDENT .SS تاریخچه .sp پروژه در اوت ۲۰۱۶ به \% منتقل شد. ساختار فایل‌ها بازسازماندهی شد و بنچمارک‌ها وصله شدند تا از ماژول perf برای اجرای بنچمارک در چندین فرایند استفاده کنند. .sp پروژه در دسامبر ۲۰۰۸ توسط Collin Winter و Jeffrey Yasskin برای پروژه Unladen Swallow آغاز شد. این پروژه تا فوریه ۲۰۱۶ در \% میزبانی می‌شد. .sp سایر بنچمارک‌های پایتون: .INDENT 0.0 .IP \(bu 2 CPython: سامانه speed.python.org \% از pyperf، pyperformance و Codespeed \% (برنامه وب Django) استفاده می‌کند .IP \(bu 2 PyPy: سامانه speed.pypy.org \% از بنچمارک‌های PyPy \% استفاده می‌کند .IP \(bu 2 Pyston: ابزار pyston\-perf \% و speed.pyston.org \% .IP \(bu 2 بنچمارک‌های Numba در \% .IP \(bu 2 Cython: دموها/بنچمارک‌های Cython در \% .IP \(bu 2 pythran: ابزار numpy\-benchmarks در \% .UNINDENT .sp همچنین فهرست پستی سرعت پایتون (Python speed mailing list) \% و ماژول pyperf پایتون \% (مورد استفاده در pyperformance) را ببینید. .sp ابزار pyperformance هنوز برای PyPy بهینه‌سازی نشده است: در عوض برای سنجش عملکرد PyPy از پروژه بنچمارک‌های PyPy \% استفاده کنید. .sp تصویر تولیدشده توسط bm_raytrace (ردیابی پرتو در پایتون خالص): [image: Pure Python raytracer] [image] .SH "نویسندگان (AUTHORS)" Victor Stinner .SH "کپی‌رایت و تکثیر (COPYRIGHT)" 2017, Victor Stinner .\" End of generated man page.