آموزش مجموعه مراحل در همزمانی در پایتون 

4 سال پیش
آموزش مجموعه مراحل در همزمانی در پایتون
امتیاز دهید post

 آموزش مجموعه مراحل در همزمانی در پایتون 

در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به  آموزش مجموعه مراحل در همزمانی در پایتون  خواهیم پرداخت.

مجموعه فرآیند را می توان به همان روشی که مجموعه رشته ها را ایجاد و استفاده کرده ایم ، ایجاد و استفاده کرد. مجموعه فرآیند را می توان به عنوان گروهی از فرآیندهای از قبل فوری و بیکار تعریف کرد که آماده ارائه کار هستند. ایجاد مجموعه فرآیند برای نمونه سازی فرآیندهای جدید برای هر کاری که نیاز به انجام تعداد زیادی وظیفه داریم ، ترجیح داده می شود.

ماژول پایتون – Concurrent.futures

کتابخانه استاندارد پایتون ماژولی به نام concurrent.futures دارد. این ماژول برای ارائه رابط سطح بالا برای راه اندازی کارهای ناهمزمان، در پایتون 3.2 اضافه شد. این یک لایه انتزاعی در بالای ماژول های رشته ای و چند پردازشی پایتون برای ایجاد رابط کاربری برای اجرای کارها با استفاده از مجموعه رشته یا فرآیندها است.

در بخشهای بعدی، ما به زیر کلاسهای مختلف ماژول concurrent.futures خواهیم پرداخت.

 

کلاس Executor

Executor یک کلاس انتزاعی از ماژول همزمان پایتون است. به طور مستقیم قابل استفاده نیست و ما باید از یکی از زیر کلاس های بتونی زیر استفاده کنیم –

  • ThreadPoolExecutor
    ProcessPoolExecutor

ProcessPoolExecutor – یک زیر کلاس مشترک

این یکی از زیر کلاس های مشترک کلاس Executor است. این از پردازش چندگانه استفاده می کند و مجموعه ای از فرآیندها برای ارسال وظایف به دست می آوریم. این مجموعه وظایف را به فرایندهای موجود اختصاص می دهد و برای اجرای آنها برنامه ریزی می کند.

چگونه یک ProcessPoolExecutor ایجاد کنیم؟

با کمک ماژول concurrent.futures و مجری زیر کلاس مشترک آن، می توانیم به راحتی مجموعه فرآیند ایجاد کنیم. برای این منظور، ما باید یک ProcessPoolExecutor با تعداد پردازش هایی که می خواهیم در مجموعه فرایند ایجاد کنیم. به طور پیش فرض ، عدد 5 است. این کار با ارسال یک کار به مجموعه فرآیند دنبال می شود.

مثال

ما اکنون همان مثالی را که در هنگام ایجاد thread pool استفاده کردیم ، در نظر خواهیم گرفت، تنها تفاوت در این است که اکنون ما به جای ThreadPoolExecutor از ProcessPoolExecutor استفاده خواهیم کرد.

 

خروجی

 

در مثال بالا، یک ProcessPoolExecutor با 5 رشته ساخته شده است. سپس کاری که قبل از دادن پیام 2 ثانیه منتظر بماند، به مجری مجموعه پردازش ارسال می شود. همانطور که از خروجی مشخص است ، کار تا 2 ثانیه تمام نمی شود، بنابراین اولین فراخوانی برای ()False ،done را برمی گرداند. پس از 2 ثانیه، کار انجام می شود و ما با فراخوانی روش ()result بر روی آن نتیجه Future را می گیریم.

Instantizing ProcessPoolExecutor – مدیر زمینه

راه دیگر برای پیاده سازی ProcessPoolExecutor با کمک مدیر زمینه است. این کار مشابه روشی است که در مثال بالا استفاده شده است. مزیت اصلی استفاده از مدیر زمینه این است که از نظر نحوی خوب به نظر می رسد. پیاده سازی را می توان با کمک کد زیر انجام داد –

 

مثال

برای درک بهتر ، ما از همان مثال استفاده شده در هنگام ایجاد مجموعه رشته استفاده می کنیم. در این مثال، ما باید با وارد کردن ماژول concurrent.futures شروع کنیم. سپس تابعی به نام ()load_url ایجاد می شود که url درخواست شده را بارگیری می کند. سپس ProcessPoolExecutor با 5 تعداد رشته در مجموعه ایجاد می شود. از ProcessPoolExecutor به عنوان مدیر زمینه استفاده شده است. ما می توانیم با فراخوانی روش ()Future ،result را بدست آوریم.

خروجی

اسکریپت پایتون فوق خروجی زیر را ایجاد می کند –

 

استفاده از تابع ()Executor.map 

از تابع ()Executor.map پایتون برای انجام تعدادی از کارها بسیار استفاده می شود. یکی از این وظایف استفاده از یک تابع خاص برای هر عنصر قابل تکرار است. به همین ترتیب ، می توانیم تمام عناصر تکرار کننده را به یک تابع ترسیم کرده و این موارد را به عنوان مشاغل مستقل به ProcessPoolExecutor ارائه دهیم. برای درک این موضوع مثال زیر را از اسکریپت پایتون در نظر بگیرید.

مثال

ما همان مثالی را که در هنگام ایجاد thread thread با استفاده از تابع () Executor.map استفاده کردیم ، در نظر خواهیم گرفت. در مثالی که در زیر آمده است، از تابع نقشه برای اعمال تابع ()square به هر مقداری از آرایه مقادیر استفاده می شود.

 

خروجی

اسکریپت پایتون فوق خروجی زیر را ایجاد می کند

 

چه زمانی از ProcessPoolExecutor و ThreadPoolExecutor استفاده کنیم؟

اکنون که در مورد هر دو کلاس Executor – ThreadPoolExecutor و ProcessPoolExecutor – مطالعه کردیم ، باید بدانیم که چه زمان از کدام مجری استفاده کنیم. ما باید ProcessPoolExecutor را در صورت بارهای متصل به CPU و ThreadPoolExecutor را در صورت حجم کاری I / O را انتخاب کنیم.

اگر ما از ProcessPoolExecutor استفاده می کنیم ، دیگر نیازی به نگرانی در مورد GIL نداریم زیرا از چند پردازش استفاده می کند. علاوه بر این، زمان مقایسه با ThreadPoolExecution کمتر خواهد بود. برای درک این موضوع، مثال زیر را برای اسکریپت پایتون در نظر بگیرید.

مثال

 

خروجی 

 

خروجی 

 

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

 

منبع.

لیست جلسات قبل آموزش همزبانی در پایتون

  1. آموزش همزمانی در برنامه نویسی پایتون
  2. آموزش همزمانی در برنامه نویسی پایتون _ مقدمه
  3. آموزش معماری سیستم و حافظه در برنامه نویسی پایتون
  4.  آموزش رشته ها در همزمانی پایتون 
  5. آموزش پیاده سازی رشته در همزمانی پایتون
  6. آموزش همگام سازی رشته ها در همزمانی پایتون
  7. آموزش ارتباط رشته ها در همزمانی پایتون
  8. آموزش تست برنامه های رشته در همزمانی پایتون
  9. اشکال زدایی از برنامه های رشته در همزمانی پایتون
  10. آموزش بنچ مارکینگ و پروفایل در همزمانی پایتون
  11. آموزش مجموعه رشته ها در همزمانی در پایتون 
امتیاز دهید post
0
برچسب ها :
نویسنده مطلب saber

دیدگاه شما

بدون دیدگاه