کد پایتون خود را با سرعت C اجرا کنید!

شکل ۱. سرعت
شکل ۱. سرعت
منتشر‌شده در: towardsdatascience به تاریخ ۱۸ آوریل ۲۰۲۱
لینک منبع: Run Your Python Code as Fast as C

به عنوان یک محقق دکترا، برای شغل من بسیار مهم است که به سرعت یک ایده را کدنویسی کنم تا ببینم آیا جواب می‌دهد یا نه. پایتون یک ابزار عالی برای این کار است. این زبان امکان تمرکز بر روی خود ایده را فراهم می‌کند و از کد boilerplate و دیگر چیزهای خسته‌کننده متاثر نمی‌شود.

با این حال، پایتون یک اشکال عمده دارد: بسیار کندتر از زبان‌های گردآوری‌شده مانند C یا C + + است. بنابراین، پس از اینکه ما یک ایده را با ساخت یک نمونه اولیه پایتون آزمایش کردیم و حالا می‌خواهیم آن را به یک ابزار سریع و موثر تبدیل کنیم، چه کار باید بکنیم؟ اغلب اوقات، کار را دو بار انجام می‌دهیم و کد پایتون را به C تبدیل می‌کنیم. اگر نمونه اولیه پایتون ما می‌توانست سریع‌تر کار کند، عالی نبود؟ تمام زمانی که صرف اجرای دوباره همه چیز می‌شود را می‌توان برای چیزی با معنی‌تر و جالب‌تر استفاده کرد.

خوشبختانه، من به یک راه‌حل برای این مشکل برخوردم: PyPy، یک جایگزین سریع برای پایتون.

مطالعه مقاله ۱۲ مورد از بهترین ابزارهای بازبینی کد برای توسعه‌دهندگان توصیه می‌شود.
شکل ۲. :PyPy
شکل ۲. :PyPy


شکل ۳. کدها
شکل ۳. کدها

برای نشان دادن اینکه چه مقدار سرعت را PyPyمی‌تواند فراهم کند، من هم مفسر پایتون و هم PyPy را روی مثال زیر اجرا کردم:

اساسا، اسکریپت تمام اعداد صحیح بین ۰ و ۱۰۰۰۰۰۰۰۰ را در یک حلقه اضافه می‌کند و هر زمان که تمام می‌شود یک پیام و زمان اجرای سند را چاپ می‌کند. اگرچه این یک ارزیابی علمی نیست، اما مثال نشان‌داده‌شده هنوز هم شگفت آور است. در مقایسه با مفسر پیش‌فرض پایتون، که تقریبا به ۱۰ ثانیه نیاز دارد، Py اجرای خود را پس از بیش از ۰.۲۲ ثانیه به پایان می‌رساند! همچنین توجه داشته باشید که ما می‌توانیم کد پایتون خود را بدون هیچ‌گونه تغییری به PyPy وارد کنیم. وقتی آن را با C، استاد سرعت، مقایسه کنید، نتیجه حتی چشمگیرتر هم می‌شود. در کامپیوتر من، اجرای معادل در C برابر با ۳۲ / ۰ ثانیه طول می‌کشد. اگرچهC به طور کلی استاد سرعت باقی می‌ماند، اما PyPyمی‌تواند C را در برخی موارد شکست دهد.

« اگر می‌خواهید کد شما سریع‌تر از لحاظ جادویی اجرا شود، احتمالا باید فقط از PyPy استفاده کنید.»-گویدو ون روسوم (سازنده پایتون) منبعyoutu.be/۲wDz6Hxgmotic1012

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

چرا PyPy اینقدر سریع است؟

این سوالی است که احتمالا از خودتان پرسیده‌اید که آیا برای اولین بار به PyPy برخورد کرده‌اید یا خیر و حق با شماست. در ابتدا مثل جادو به نظر می‌رسد. ما دقیقا همان کد را اجرا می‌کنیم و با PyPy یک افزایش سرعت عظیم به ظاهر رایگان به دست می‌آوریم.

اگر چه کد دقیقا یک‌سان است، نحوه اجرای کد نمی‌تواند متفاوت باشد. راز پشت ارتقا عملکرد PyPy جمع‌آوری به موقع JIT به طور خلاصه است. اما بیایید به آرامی پیش برویم.

ترکیب پیش از موعد

زبان‌های برنامه‌نویسی مانندC، C + + اما همچنین سوییفت Swift ، هاسکل Haskell، راست Rust، و بسیاری از زبان‌های دیگر قبل از زمان گردآوری می‌شوند. این بدان معنی است که پس از نوشتن برخی کدها در آن زبان‌ها، شما یک دکمه را فشار می‌دهید و یک کامپایلر کد منبع را به کد قابل خواندن توسط ماشین تبدیل می‌کند، که توسط یک معماری کامپیوتر خاص قابل خواندن است. هر زمان که برنامه اجرا می‌شود، کد منبع اصلی شما خیلی وقت است که از بین رفته است. تنها چیزی که اجرا می‌شود کد ماشین است.

شکل ۴. ترکیب Ahead-Time فایل‌های مرجع را به کد ماشین تبدیل می‌کند.
شکل ۴. ترکیب Ahead-Time فایل‌های مرجع را به کد ماشین تبدیل می‌کند.

تفسیر زبان

پایتون، JavaScript، PHP و زبان‌های مشابه رویکرد متفاوتی دارند. آن‌ها تفسیر می‌شوند. در مقایسه با تبدیل کد منبع به کد ماشین، منبع دست‌نخورده باقی می‌ماند. هر بار که برنامه اجرا می‌شود یک مفسر به خط کد نگاه می‌کند و آن را برای ما اجرا می‌کند.

شکل ۵. یک مفسر یک خط به یک خط برنامه را اجرا می‌کند.
شکل ۵. یک مفسر یک خط به یک خط برنامه را اجرا می‌کند.

در مورد JavaScript یک مفسر در هر مرورگر وب ساخته می‌شود. مفسر استاندارد پایتون، Cpyton نامیده می‌شود. با این حال، تمایز بین زبان پایتون و چیزی که کد ما را اجرا می‌کند، بسیار مهم است. علت آن این است که ما می‌توانیم ابزارهای کاملا متفاوتی با قابلیت اجرای کد پایتون داشته باشیم. اینجا جایی است که PyPy وارد تصویر می‌شود.

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

ترکیب به موقع

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

شکل ۶. JIT تلفیقی از پیش از زمان و تفسیر را ترکیب می‌کند.
شکل ۶. JIT تلفیقی از پیش از زمان و تفسیر را ترکیب می‌کند.

در این مفهوم، ترکیب JIT ترکیبی از تفسیر و ترکیب پیش از زمان است. ما ارتقای عملکرد ترکیب پیش از زمان و انعطاف‌پذیری و در دسترس بودن پلتفرم متقابل زبان‌های تفسیرشده را به دست می‌آوریم.

چگونه می‌توانید از PyPy بهره ببرید؟

اکنون که می‌دانیم PyPy چگونه به افزایش عملکرد شگفت‌انگیز دست می‌یابد، می‌خواهیم از آن استفاده کنیم. PyPy به صورت رایگان در pypy.org در دسترس است و نصب آن آسان است. علاوه بر خود ابزار، این سایت حاوی نکات و ترفندهای زیادی برای تنظیم دقیق برنامه پایتون برای افزایش بیشتر عملکرد است. از آنجا که PyPy تنها یک پیاده‌سازی جایگزین از پایتون است، اغلب اوقات بدون هیچ تغییری در پروژه پایتون شما کار می‌کند. این نرم‌افزار کاملا با چارچوب وب، جانگو Django ، بسته محاسباتی علمی نومپی Numpy و بسته‌های متعدد دیگر سازگار است. این کار ساعت‌های بی‌شماری از پیاده‌سازی مجدد نمونه‌های اولیه در C را برای من صرفه‌جویی کرد و من نمی‌خواستم آن را از کیت ابزار برنامه‌نویسی از دست بدهم.

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