کانال تلگرامی https://t.me/pcbooks جهت خواندن کتاب های تخصصی کامپیوتر
برنامه ها و اپلیکیشن های پایتون خودتون رو سریع تر اجرا کنید
اجرای برنامه های پایتون روی سخت افزار های به نسبت ضعیف تر از نظر منابع پردازشی مثل Raspberry pi می تونه مقداری کندتر از pc های معمولی و سرور اجرا بشه.
خوشبختانه راه حل هایی برای این مشکل وجود داره که میتونه روند اجرا رو بهبود ببخشه.
در پایتون پکیج ها و برنامه های جالبی وجود داره که به ما امکان کامپایل کد و یا حتی repackage کردن اون و یا اجرای خط به خط (مفسر) سریع تر برنامه رو به ما میده.
توی این نوشته علاقمندم که دوتا از این مدل پکیج ها رو که خودم از کار باهاشون راضی بودم معرفی کنم.
Pypy :
یک جایگزین برای مفسر بومی پایتون هست که به شما امکان اجرای 4 برابر سریع تر کد رو میده!
Nuitka :
یک ابزار سومند بومی پایتون که کد های پایتون مارو به زبان C کامپایل میکنه!
پایتون سریعتر با Pypy:
سایت رسمی Pypy چندین نتیجه از بررسی پرفورمنس و کارایی خودش رو منتشر کرده که میانگین اونها نشون میده کدها نسبت به نسخه بومی پایتون 4.2 برابر سریع تر اجرا میشه.
در اجرای تستی من Pypy حدود 9 برابر سریع تر از پایتون اصلی و بومی اجرا شد.
در حقیقت عملکرد بهتر Pypy به دلیل کامپایلر به موقع آن (چه ترجمه بدی!!) یا همون JIT
هستش و در مقایسه با مفسر خط به خطی پایتون بومی بهتر عمل میکنه.
حتی یک نقل قول از 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 تقریبا هیچ مشکلی با پکیج های سنگین ندارد و تقریبا با تمامی پکیج ها به خوبی کار میکند.
مطلبی دیگر از این انتشارات
Binary Analysis - PART One
مطلبی دیگر از این انتشارات
یک فنجان جاوا - دیزاین پترن ها - Flyweight
مطلبی دیگر از این انتشارات
پایتونستان-مینی پروژه یک برنامه GUI-قسمت چهارم