6 کتابخانه برای پردازش موازی در پایتون

پایتون یک زبان برنامه نویسی راحت و دوستانه به نظر می رسد اما سریعترین زبان برنامه نویسی نیست. برخی از محدودیت های سرعت آن به دلیل اجرای پیش فرض آن یعنی cPython تک نخی (single-threaded) است. یعنی پایتون در یک زمان، فقط از یک هسته پردازشی استفاده می کند. در ادامه به معرفی 6 کتابخانه برای پردازش موازی در پایتون خواهیم پرداخت.

پایتون شامل یک روش محلی (native) برای توزیع و اجرای بار کاری پایتون در چندین CPU (یا هسته های یک CPU) است. ماژول چند پردازشی (multiprocessing) که چندین نسخه از مفسر پایتون را کپی می کند، هر کدام را در یک هسته پردازشی جداگانه قرار می دهد و وتقسیم task ها یا وظایف در هسته ها را فراهم می کنند. اما گاهی اوقات حتی قابلیت چند پردازشی هم کافی نیست.

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

Ray

پردازش موازی در پایتون

پردازش موازی در پایتون

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

Dask

پردازش موازی در پایتون

پردازش موازی در پایتون

از بیرون، Dask بسیار شبیه به کتابخانه Ray است. این کتابخانه برای محاسبات موازی توزیع شده در پایتون، با سیستم زمانبندی متعلق به خود است.

Dask به 2 روش اساسی کار می کند. اولین مورد از طریق ساختار داده های موازی (در اصل، نسخه شخصی Dask از آرایه های NumPy، لیست ها یا Pandas DataFrames هستند)، است. نسخه های Dask که بر حالت پیش فرض خود ساخته شده اند را عوض کنید تا Dask به طور خودکار اجرای آن ها را در خوشه یا کلاستر (Cluster) شما پخش کند. این کار به طور معمول چیزی بیش از تغییر نام یک import را شامل می شود، اما گاهی ممکن است نیاز به بازنویسی کار به طور کامل باشد.

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

Dispy

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

Pandaral-lel

همانطور که از نام آن مشخص است، راهی برای موازی سازی کارهای پانداس (Pandas) در گره های مختلف است. نکته منفی این است که این کتابخانه فقط با پانداس ها کار می کند. اما اگر پانداس همان چیزی است که شما استفاده می کنید و تنها چیزی که می خواهید، روشی برای تسریع در کار پانداس ها با استفاده از هسته های مختلف در یک CPU است، این کتابخانه مناسب شماست.

پردازش موازی در پایتون

پردازش موازی در پایتون

Ipyparallel

این کتابخانه یکی دیگر از کتابخانه های پردازش موازی و توزیع فرآیند کاملا متمرکز است که به طور خاص برای موازی کردن کد Jupyter notebook در یک خوشه (کلاستر) استفاده می شود. پروژه ها و تیم هایی که در Jupyter مشغول به کار هستند، می توانند از lpyparallel استفاده کنند. این کتابخانه از روش های زیادی برای موازی سازی بهره می برد.

Joblib

Joblib دو هدف کلی دارد: وظایف یک فرآیند ها را به صورت موازی اجرا کنید و اگر چیزی تغییر نکرد، نتایج را مجددا محاسبه نکنید. این کارایی باعث می شود تا Joblib برای محاسبات علمی مناسب باشد، جایی که نتایج تجدید پذیر، غیر قابل تغییر باشند. مستندات Joblib مثال های زیادی برای استفاده از تمام ویژگی های آن ارائه می دهد.

نحو (Syntax) این کتابخانه برای موازی سازی به اندازه کافی ساده است. آن را به یک دکوراتور (Decorator) اختصاص می دهد که می تواند برای تقسیم کار در پردازنده ها یا نتایج ذخیره سازی استفاده شود. وظایف می توانند از فرآیند ها یا نخ ها (thread) استفاده کنند.

QR:  6 کتابخانه برای پردازش موازی در پایتون
به اشتراک بگذارید