پایتون یک زبان برنامه نویسی راحت و دوستانه به نظر می رسد اما سریعترین زبان برنامه نویسی نیست. برخی از محدودیت های سرعت آن به دلیل اجرای پیش فرض آن یعنی 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) استفاده کنند.
دیدگاه ها
سوالات پیش از ثبت نام یا نظرات خود را در مورد این پست مطرح نمایید.