پرفورمنس در پایتون

با سلام خدمت دوستان عزیز

گفتم یکم دسته بندی محبوبم رو فعال کنم :sweat_smile:

تو این مبحث … یه سیری گذرا روی افزایش پرفورمنس در پایتون صحبت میکنم و خوشحال میشم دوستان هم مشارکت کنن

قبل از هرچیزی …

همونطور ک میدونید . پایتون بعد از ریلیز نسخه ۳ … دو پارچه شد و نسخه ۲ از بین نرفت … و کامیونیتی بصورت غیررسمی … توسعه پایتون ۲ رو برعهده گرفت … و تلاش زیادی کرد روش … (ک در نهایت تو سال 2020 به خواب ابدی میره)

یکی از مهمترین دلایلش کتابخونه های جامعی بود ک هنوز به ۳ پورت نشده بود . .
و یکی از دلایل عجیب اما واقعیش پرفورمنس بود ک رفته رفته تو نسخه های ۳ داشت کاهش پیدا میکرد!! و ۲ همچنان سریع تر بود(اما نه زیاد) …

اینجا میتونید ببینید ک پایتون3.7 سریع ترین نسخه پایتون هست/خواهد بود(هنوز از حالت تست در نیومده ولی نزدیکه)

https://hackernoon.com/which-is-the-fastest-version-of-python-2ae7c61a6b2b

علتش هم بخاطر race condition روی gil و کرش کردنش بوده انگار… ک بصورت اروم رخ میداده و بخاطر بویلر پلیت ها … اصلا مشخص نمیشده … ک سرانجام تو نسخه ۳.۷ متوجهش میشن و رفعش میکنن(درواقع issueشده بوده ولی اون core developer عزیز… گذاشته بودتش برا بعد ک یادش میره تا نسخه 3.7 :man_facepalming:

https://vstinner.github.io/python37-gil-change.html

ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

و اما برسیم به بحث زیبای پرفورمنس (هرچی باشه پایتون از سایر رقبا کندتر هست هنوزم) …

کامیونیتی و کلی گروه بصورت مستقلی … سعی کردن پرفورمنس رو جبران کنن … ک خیلی هاشون موفق نبودن … و بعضی هاشون موفق بودن …

از پروژه هایی ک همچنان فعال هستن و خیلی مورد توجه هستن و تو بنچمارک ها آمار خوبی کسب میکنن میشه به اینها اشاره کرد

1.pypy
2.cython
3.C API (Official)
4. cffi
5. ctypes (Official)
6.numba

pypy
پای پای یک مفسر jit هست … ک بدون تغییر تو کد … به شما مزیت سرعت بیشتر(چیزی بین 2تا5برابر سریع تر) رو میده

cython
سایتون یک کامپایلر کامل هست … کد شما رو برمیگردونه روی C و بعد اونو کامپایل میکنه … ک بدون تغییر کد حداقل 30% به شما افزایش پرفورمنس میده … اما اگر تایپ های استاتیک C رو به کدتون اضافه کنید و کامپایل کنید … به شما سرعتی نزدیک به خود C میده!!

C Api …این مورد یکی از فیچرایی هست ک پایتون رو سرپا نگه داشته واقعا : ) و تمام تلاششون این بوده ک این رو حفظ کنن … چون شما میتونید بصورت رسمی… کد C بنویسید و با ایمپورت کردن PyObject … رپر پایتون روی کد C بزارید … ک خب مشخصا با پرفورمنس C هم ک آشنا هستین:smiley:

c foreign function interface (cffi)
این هم تقریبا میتونه کل کد های C رو داخل پایتون لود کنه و فراخوانی کنه … و تا جایی میدونم کار تیم pypy هست…

c types
این هم بصورت رسمی در پایتون موجوده و استاتیک تایپ های C رو به پایتون اضافه میکنه …

numba
یک کامپایلر فوق العاده jit هست که کار تیم آناکوندا هست… ک میتونید روی فانکشن هاتون دیکوریتور هاشو اضافه کنید تا روی LLVM کامپایلش کنه … و پرفورمنس خیلی عالی ای به شما میده (تو بنچمارک ها تفاوت زیادی با C ندیدم )

تمام اینها کاربردی هستن … بستگی داره که چه کاری میکنید و چه مهارتی دارید …
شخصا همشونو تست کردم … و باهاشون سمپل های کوچیکی زدم …
اگر نمیخایید کار زیادی بکنید و با C و استاتیک تایپ ها زیاد رفیق نیستین توصیه میکنیم pypy و numba رو در نظر داشته باشید … (البته pypy با بعضی لایبرری های پایتونی سازگار نیست(بخصوص اونهایی ک با C Api دولوپ شدن)) …

اونهایی ک به کررات استفاده شدن و تو ساخت لایبرری های بزرگ بکار رفتن c api و cython هستن (مثلا numpy , scipy , tensorflow ,…)

از بین اینها cython و numba قادر هستن GIL رو باز کنن و پارللیسم واقعی و ایمن به شما بدن(البته کار با cython مهارت نیاز داره )…

اگر علاقمند بودین … آموزش از هرکدوم میزارم …
موفق باشید :slightly_smiling_face::hibiscus:

4 پسندیده

به نظر من پایتون زبان خوبی هست اما مشخصا پرفرمنس خوب جزئی از قابلیت های خوبش نیست. چون بخاطر ماهیت مفسریش مهدودیت هایی رو به یدک می کشه که زبانهایی مثل روبی و php هم باهاش درگبرند. کلا به نظرم استفاده از پایتون نباید بخاطر پرفرمنس باشه و نکات دیگه ای در پایتون هست که می تونه اون رو به زبان خوبی تبدیل کنه.

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

1 پسندیده

این پست صرفا جنبه عمقی داشت اقا سمیر… ک نشون بدیم ک این پرفورمنس قابلیت جبران داره … و اگر کسی قصدش پرفورمنس بود … میتونه روی همین پایتون هم به این مقصود دست پیدا کنه … و نیاز نیست انواع اقسام زبان هارو ک مشخصا خبره شدن توشون زمانبر هست و هرکدوم فلسفه خاصی دنبال میکنن رو یاد بگیره …
درسته فارغ از پرفورمنس … پایتون حرفای زیادی برای گفتن تو اکثر زمینه ها داره … و همینم باعث شده بالاترین رشد بین زبان ها مال پایتون باشه … و خیلی ها بعنوان یکی از زبان هایی ک تو آینده حضور خواهد داشت بهش نگاه کنن

درست می فرمائید.

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

1 پسندیده

یادگیری برای این منظور ک فرمودید صحیحه … ولی قبول ندارید ک هر زبان چم و خم خاص خودشو داره و نیازمند تجربه هست تا باهاش وارد پروداکشن شد ؟؟‌…

1 پسندیده

بله دقیقا درسته. ولی خوب یادگیری همیشه باعث رشد می شه حتی اگه هیچ وفت به پروداکشن نرسه :slight_smile:

2 پسندیده