برنامه ها و اپلیکیشن های پایتون خودتون رو سریع تر اجرا کنید

Post image

اجرای برنامه های پایتون روی سخت افزار های به نسبت ضعیف تر از نظر منابع پردازشی مثل Raspberry pi می تونه مقداری کندتر از pc های معمولی و سرور اجرا بشه.

خوشبختانه راه حل هایی برای این مشکل وجود داره که میتونه روند اجرا رو بهبود ببخشه.

در پایتون پکیج ها و برنامه های جالبی وجود داره که به ما امکان کامپایل کد و یا حتی repackage کردن اون و یا اجرای خط به خط (مفسر) سریع تر برنامه رو به ما میده.

توی این نوشته علاقمندم که دوتا از این مدل پکیج ها رو که خودم از کار باهاشون راضی بودم معرفی کنم.

Pypy :

یک جایگزین برای مفسر بومی پایتون هست که به شما امکان اجرای 4 برابر سریع تر کد رو میده!

Nuitka :

یک ابزار سومند بومی پایتون که کد های پایتون مارو به زبان C کامپایل میکنه!

پایتون سریعتر با Pypy:

سایت رسمی Pypy چندین نتیجه از بررسی پرفورمنس و کارایی خودش رو منتشر کرده که میانگین اونها نشون میده کدها نسبت به نسخه بومی پایتون 4.2 برابر سریع تر اجرا میشه.

در اجرای تستی من Pypy حدود 9 برابر سریع تر از پایتون اصلی و بومی اجرا شد.

در حقیقت عملکرد بهتر Pypy به دلیل کامپایلر به موقع آن (چه ترجمه بدی!!) یا همون JIT

just-in-time compiler

هستش و در مقایسه با مفسر خط به خطی پایتون بومی بهتر عمل میکنه.

حتی یک نقل قول از Guido van Rossum یا همون خالق اصلی پایتون وجود داره که میگه:

“If you want your code to run faster, you should probably just use PyPy.”

برای پلتفرم ویندوز و لینوکس و مک دونسخه Pypy وجود داره یکی نسخه 2.7 و دیگری 3.6

برای نصب Pypy 3 روی اوبونتو کافیه فرمان های زیر رو اجرا کنید:

$ sudo add-apt-repository ppa:pypy/ppa
$ sudo apt update
$ sudo apt install pypy3

نسخه Pypy 3 همچنین از طریق snap هم قابل نصبه (این روش ممکنه راحت ترین راه برای نصب روی Raspberry pi ) باشه.

## if you need to install snap 
$ sudo apt install snapd 
## reboot after snap is installed 
$ sudo snap install pypy3 --classic

نکته خوب راجع به Pypy اینه که شما میتونید کدهای خودتون رو همونطور که هست اجرا کنید.مثلا اجرای ساده اون برای کدها تون به این شکله:

$ pypy3 myapp.py

اگه شما برنامه هاتون رو به شکل یک اسکریپت در لینوکس یا مک اجرا میکنید به عنوان مثال دستور

chmod +x myapp

به کدتون دادید ، حتما به یاد داشته باشید که خط اول کدرو از

#!/usr/bin/python

به

#!/usr/bin/pypy3

تغییر بدید.

کتابخانه های Pypy و محدودیت های آن :

کتابخانه های بسیار خوب و عالی ای برای Pypy موجود هست با این حال به این نکته توجه داشته باشید که تمامی کتابخانه های نسخه بومی پایتون ممکنه توسط Pypy پشتیبانی نشود.

قبل از اجرا کدهایتان با Pypy حتما بررسی کنید که کتابخانه های مورد استفاده توسط Pypy پشتیبانی شده باشند.

متاسفانه TKinter جزء کتابخانه های مورد پشتیبانی Pypy نمی باشد.

به منظور نصب کتابخانه های پایتون در Pypy3 یک نسخه از pip جهت نصب نیاز است.

$ wget https://bootstrap.pypa.io/get-pip.py
$ pypy3 get-pip.py

بعد از نصب pip ، پکیج های پایتون قابل نصب هستند.

$ pypy3 -m pip install some-pymodule

بعضی از پکیج های سبک نظیر bottle , requests, beautifulsoup4, pika و… بدون مشکل بر روی Pypy اجرا میشوند اما بعضی پکیج های سنگین تر نظیر Numpy, MatPlotLib ممکنه که مستقیم بارگذاری نشوند و بهتر هست که از virtualenv استفاده شود.

کامپایلر پایتون Nuitka برای پایتون:

کامپایلر پایتون Nuitka در پایتون نوشته شده است و می تواند تمامی کدهای نوشته در ورژن های مختلف پایتون را کامپایل کند. Nuitka به دو پیشنیاز نیازمند است.

1- یک کامپایلر زبان C

2- پایتون می بایست روی کامپیوتر هدف نیز نصب باشد.

این کامپایلر روی تمامی سیستم های عامل نظیر ویندوز و لینوکس و مک کار میکند.برای سیستم عامل لینوکس کامپایلر GCC (5.1 به بالا) نیز می بایست نصب باشد.در سیستم عامل مک نیز کامپایلر clang مورد نیاز است.

در ویندوز نیز میتوان از MinGW64 و یا Visual Studio 2019 نیز جهت کامپایل استفاده نمود.

جهت نصب Nuitka

python -m pip install nuitka

جهت کامپایل یک کد تستی در پایتون خیلی ساده میتوان

python-m nuitka test1.py

پس از کامپایل در ویندوز یک فایل اجرای به نام test1.exe ایجاد میشود و همچنین در لینوکس نیز فایل اجرایی test1.bin ایجاد میگردد.

تست بهینگی و پرفورمنس:

بررسی کارایی و بهینگی کدهای کامپایل شده ، فاکتور های بسیاری را جهت بررسی نیاز دارد.جهت ایجاد یک استاندارد در نمایش کارایی و بنچ مارکینگ من از این کد استفاده نمودم و سخت افزار مورد استفاده نیز Raspberry pi 3 بود.

من چندید نمونه از مفسر های موجود در پایتون را تست نمودم.

  • استفاده ازمفسر Jython (Java VMS Python) ، حدودا 2 برابر کند تر از نسخه اصلی و بومی پایتون بود.

  • استفاده از ipython (بیشتر در jupyter notebooks استفاده میشود) تقریبا سرعتی برابر با نسخه اصلی و بومی پایتون داشت.

  • استفاده از pyinstall حدودا 33% از نسخه اصلی کند تر بود.

  • استفاده از Nuitka حدود 30% سریع تر از نسخه بومی و اصلی پایتون بود.

استفاده از Pypy حدودا 9 برابر سریع تر از نسخه بومی و اصلی پایتون بود و حدود 6.5 برابر سریع تر از Nuitka بود.

گزینه های دیگری نیز نظیر Cython هست که در این نوشته نیامده است. همچنین Nuitka تقریبا هیچ مشکلی با پکیج های سنگین ندارد و تقریبا با تمامی پکیج ها به خوبی کار میکند.

منبع ترجمه

You May Also Like

۱۰ الگوریتم مهم که باید در رابطه با یادگیری ماشین (Machine Learning) بدونید

۱۰ الگوریتم مهم که باید در رابطه با یادگیری ماشین (Machine Learning) بدونید

ما در آغاز یک دوران انقلابی زندگی میکنیم دلیل اون توسعه ی تجزیه و تحلیل داده ها، قدرت محاسباتی بزرگ و محاسبات ابری است. یادگیری ماشین قطعا نقش مهمی در اون ایفا خواهد کرد و مغزهای پشت این یادگیری ماشین ، مبتنی بر الگوریتم هستند. این مقاله 10 تا از محبوب ترین الگوریتم های یادگیری ماشین را که در حال حاضر استفاده می شوند پوشش می دهد .

بیشتر بخوانید