همزمان.

ساخت وبلاگ

ماژول همزمان. Futures یک رابط سطح بالا برای اجرای ناهمزمان به صورت غیر همزمان فراهم می کند.

اجرای ناهمزمان را می توان با استفاده از ThreadPoolExtour یا فرآیندهای جداگانه با استفاده از ProcessPoolExtoror انجام داد. هر دو رابط یکسان را اجرا می کنند ، که توسط کلاس مجری انتزاعی تعریف شده است.

در دسترس بودن: نه emscripten ، نه WASI.

این ماژول کار نمی کند یا در سیستم عامل های WebAssembly WASM32-EMSCRIPTEN و WASM32-WASI در دسترس نیست. برای اطلاعات بیشتر به سیستم عامل های WebAssembly مراجعه کنید.

اجرایی اشیاء

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

ارسال (fn ، / ، * args ، ** kwargs)

برنامه ریزی می کند ، fn ، به عنوان fn (*args ، ** kwargs) اجرا شود و یک شیء آینده را نشان می دهد که نمایانگر اجرای تماس قابل تماس است.

  • تکرارها بلافاصله به جای تنبلی جمع آوری می شوند.

  • Func به صورت ناهمزمان اجرا می شود و ممکن است چندین تماس برای عملکرد همزمان انجام شود.

تغییر در نسخه 3. 5: استدلال chunksize را اضافه کرد.

خاموش کردن (منتظر = درست ، * ، cancel_futures = false)

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

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

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

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

در صورت استفاده از بیانیه با بیانیه ، می توانید از این روش صریح استفاده کنید ، که مجری را خاموش می کند (انتظار می رود مجری. shutdown () با انتظار تنظیم شده در حقیقت فراخوانی شده است):

در نسخه 3. 9 تغییر یافته است: اضافه شده cancel_futures.

ThreadPoolExtoror¶

ThreadPoolExtor یک زیر کلاس مجری است که از استخر موضوعات برای اجرای تماس های ناهمزمان استفاده می کند.

بن بست ممکن است هنگامی اتفاق بیفتد که قابل تماس با آینده منتظر نتایج آینده دیگری باشد. مثلا:

کلاس همزمان. ThreadPoolExtour (max_workers = none ، thread_name_prefix = '' ، اولیه = هیچ ، initargs = ()) ¶

یک زیر کلاس مجری که از استخر حداکثر موضوعات MAX_WORKERS برای اجرای تماس های ناهمزمان استفاده می کند.

قبل از اینکه مترجم بتواند از آن خارج شود ، تمام موضوعاتی که به ThreadPoolExtoror می رسند ، پیوستند. توجه داشته باشید که کنترل کننده خروجی که این کار را انجام می دهد قبل از هر نوع گیرنده خروجی با استفاده از AtExit اجرا می شود. این بدان معناست که استثنائات در موضوع اصلی باید گرفتار و کنترل شوند تا موضوعات برای خروج از طاغوت نشان دهند. به همین دلیل توصیه می شود که از ThreadPoolextoror برای کارهای طولانی مدت استفاده نشود.

اولیه ساز یک تماس قابل استفاده است که در شروع هر موضوع کارگر نامیده می شود. Initargs یک استدلال از استدلال های منتقل شده به اولیه ساز است. در صورت افزایش استثناء ، تمام مشاغل در حال حاضر در حال تعلیق یک Brokenthreadpool و همچنین هرگونه تلاش برای ارسال مشاغل بیشتر به استخر را افزایش می دهند.

در نسخه 3. 5 تغییر یافته است: اگر max_workers هیچ یک از آنها داده نشده باشد ، به تعداد پردازنده های موجود در دستگاه ، ضرب و شتم 5 ، با فرض اینکه ThreadPoolextoror اغلب برای همپوشانی I/O به جای کار CPU و تعداد کارگران باید استفاده شود ، به طور پیش فرض خواهد بود. بالاتر از تعداد کارگران برای ProcessPoolextoror باشید.

جدید در نسخه 3. 6: آرگومان thread_name_prefix اضافه شد تا کاربران بتوانند موضوع را کنترل کنند. نام های مربوط به موضوعات کارگر ایجاد شده توسط استخر برای اشکال زدایی آسان تر.

در نسخه 3. 7 تغییر یافته است: آرگومان های اولیه و Initargs را اضافه کرد.

تغییر در نسخه 3. 8: مقدار پیش فرض MAX_WORKERS به حداقل (32 ، os. cpu_count () + 4) تغییر یافته است. این مقدار پیش فرض حداقل 5 کارگر را برای کارهای محدود I/O حفظ می کند. این حداکثر از 32 هسته CPU برای کارهای محدود CPU که GIL را آزاد می کنند استفاده می کند. و از استفاده از منابع بسیار بزرگ به طور ضمنی در ماشین های بسیار هسته جلوگیری می کند.

ThreadPoolExtoror قبل از شروع موضوعات کارگران MAX_WORSERS نیز از موضوعات کارگران بیکار استفاده می کند.

مثال Threadpoolextoror به عنوان مثال

ProcessPoolExtoror¶

کلاس ProcessPoolExtoror یک زیر کلاس مجری است که از مجموعه ای از فرآیندها برای اجرای تماس های ناهمزمان استفاده می کند. ProcessPoolExtor از ماژول چند پردازش استفاده می کند ، که به آن اجازه می دهد تا قفل مترجم جهانی را به مرحله بعدی برساند ، اما همچنین بدان معنی است که فقط اشیاء قابل انتخاب می توانند اجرا و برگردانده شوند.

ماژول __main__ باید توسط زیر فرآیندهای کارگر قابل وارد باشد. این بدان معنی است که ProcessPoolExtor در مترجم تعاملی کار نخواهد کرد.

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

کلاس همزمان. ProcessPoolExtoror (max_workers = هیچ ، mp_context = هیچ ، اولیه = هیچ ، initargs = () ، max_tasks_per_child = هیچ)

یک زیر کلاس مجری که با استفاده از استخر حداکثر فرآیندهای max_workers ، به طور غیر همزمان تماس می گیرد. اگر max_workers هیچ یک یا داده نشده باشد ، به تعداد پردازنده های موجود در دستگاه به طور پیش فرض خواهد بود. اگر max_workers کمتر یا مساوی با 0 باشد ، یک مقدار ارز افزایش می یابد. در ویندوز ، max_workers باید کمتر از یا مساوی با 61 باشد. اگر اینطور نباشد ، ValueError مطرح می شود. اگر max_workers هیچ کدام نباشد ، پیش فرض انتخاب شده حداکثر 61 خواهد بود ، حتی اگر پردازنده های بیشتری در دسترس باشند. MP_Context می تواند یک زمینه چند پردازش یا هیچ یک باشد. از آن برای راه اندازی کارگران استفاده می شود. اگر mp_context هیچ یک یا داده نشده باشد ، از متن چند پردازش پیش فرض استفاده می شود.

اولیه ساز یک تماس قابل استفاده است که در شروع هر فرآیند کارگر نامیده می شود. Initargs یک استدلال از استدلال های منتقل شده به اولیه ساز است. در صورت افزایش استثناء ، تمام مشاغل در حال حاضر در حال تعلیق یک فرآیند BrokenProcessPool و همچنین هرگونه تلاش برای ارسال مشاغل بیشتر به استخر را افزایش می دهند.

max_tasks_per_child یک آرگومان اختیاری است که حداکثر تعداد کارهایی را که یک فرآیند واحد می تواند قبل از خروج انجام دهد ، مشخص می کند و با یک فرآیند کارگر تازه جایگزین می شود. به طور پیش فرض max_tasks_per_child هیچ کدام نیست به این معنی که فرآیندهای کارگر تا زمانی که استخر زندگی می کنند زندگی می کنند. هنگامی که یک حداکثر مشخص شده است ، روش شروع چند پردازش "Spawn" به طور پیش فرض در غیاب یک پارامتر MP_Context استفاده می شود. این ویژگی با روش شروع "چنگال" ناسازگار است.

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

تغییر در نسخه 3. 7: آرگومان mp_context اضافه شد تا کاربران بتوانند Start_Method را برای فرآیندهای کارگر ایجاد شده توسط استخر کنترل کنند.

استدلال های اولیه و Initargs را اضافه کرد.

تغییر در نسخه 3. 11: آرگومان max_tasks_per_child اضافه شد تا کاربران بتوانند طول عمر کارگران را در استخر کنترل کنند.

مثال ProcessPoolExtoror به عنوان مثال

اشیاء آینده

کلاس آینده ، اجرای ناهمزمان یک فراخوانی را محاصره می کند. نمونه های آینده توسط Execute. submit () ایجاد می شوند.

کلاس همزمان. آینده ¶

اجرای ناهمزمان یک تماس پذیر را محاصره می کند. نمونه های آینده توسط مجری ایجاد می شود.

لغو ()

تلاش برای لغو تماساگر این تماس در حال حاضر اجرا شود یا در حال اجرا باشد و نمی تواند لغو شود ، این روش نادرست باز می گردد ، در غیر این صورت تماس لغو می شود و روش درست باز می گردد.

لغو شد ( ) ¶

اگر تماس با موفقیت لغو شد ، درست برگردید.

دویدن ()

اگر تماس در حال حاضر اجرا شده و نمی توان لغو شد ، درست برگردید.

انجام شده ( ) ¶

اگر تماس با موفقیت لغو شد یا به پایان رسید ، درست برگردید.

نتیجه (TIMEOUT = NO)

مقدار برگشتی توسط تماس را برگردانید. اگر تماس هنوز به پایان نرسیده باشد ، این روش تا ثانیه ها منتظر خواهد ماند. اگر این تماس در ثانیه های زمانی به پایان نرسیده باشد ، یک ساعت زمانی مطرح می شود. مدت زمان می تواند یک int یا شناور باشد. اگر مدت زمان مشخص نشده یا هیچ کدام ، محدودیتی برای زمان انتظار وجود ندارد.

اگر آینده قبل از اتمام لغو شود ، CancelledError مطرح می شود.

اگر تماس یک استثنا را مطرح کند ، این روش همان استثنا را بالا می برد.

استثنا (TIMOUT = NO)

استثناء مطرح شده توسط تماس را برگردانید. اگر تماس هنوز به پایان نرسیده باشد ، این روش تا ثانیه ها منتظر خواهد ماند. اگر این تماس در ثانیه های زمانی به پایان نرسیده باشد ، یک ساعت زمانی مطرح می شود. مدت زمان می تواند یک int یا شناور باشد. اگر مدت زمان مشخص نشده یا هیچ کدام ، محدودیتی برای زمان انتظار وجود ندارد.

اگر آینده قبل از اتمام لغو شود ، CancelledError مطرح می شود.

اگر تماس بدون افزایش به پایان رسید ، هیچ کدام بازگردانده نمی شوند.

add_done_callback (FN)

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

تماس های اضافه شده به این ترتیب که اضافه شده اند فراخوانی می شوند و همیشه در یک موضوع متعلق به فرایندی که آنها را اضافه می کند ، فراخوانی می شوند. اگر قابل تماس یک زیر کلاس استثناء را افزایش دهد ، وارد آن می شود و نادیده گرفته می شود. اگر قابل تماس یک زیر کلاس Baseexception را بالا ببرد ، رفتار تعریف نشده است.

اگر آینده قبلاً به اتمام برسد یا لغو شده باشد ، FN بلافاصله فراخوانی می شود.

روشهای آینده زیر برای استفاده در تست های واحد و اجرای اجرایی در نظر گرفته شده است.

set_running_or_notify_cancel ()

این روش فقط باید قبل از اجرای کار مرتبط با آینده و آزمایشات واحد توسط اجرایی اجرا شود.

اگر این روش نادرست بازگردد ، آینده لغو شد ، یعنی آینده. cancel () فراخوانده شد و درست بازگشت. هر موضوعی که منتظر تکمیل آینده هستند (یعنی از طریق AS_COMPLETED () یا صبر ()) از خواب بیدار می شوند.

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

این روش فقط یک بار نامیده می شود و نمی توان پس از Future. set_result () یا Future. set_exception () نامید.

set_result (نتیجه)

نتیجه کار مرتبط با آینده را تعیین می کند.

این روش فقط باید توسط اجرای مجری و تست های واحد استفاده شود.

در نسخه 3. 8 تغییر یافته است: این روش اگر آینده در حال حاضر انجام شده باشد ، همزمان را ایجاد می کند.

set_exception (استثنا)

نتیجه کار مرتبط با آینده را به استثناء استثنا می کند.

این روش فقط باید توسط اجرای مجری و تست های واحد استفاده شود.

در نسخه 3. 8 تغییر یافته است: این روش اگر آینده در حال حاضر انجام شده باشد ، همزمان را ایجاد می کند.

توابع ماژول ¶

منتظر نمونه های آینده (احتمالاً توسط نمونه های مختلف مجری) است که توسط FS برای تکمیل ارائه شده است. آتی های تکراری که به FS داده می شود حذف می شوند و فقط یک بار بازگردانده می شوند. مجموعه ای از مجموعه های 2 نام را برمی گرداند. مجموعه اول ، با نام Done ، حاوی آتی است که قبل از اتمام انتظار به پایان رسید (آینده به پایان یا لغو). مجموعه دوم ، با نام NOT_DONE ، شامل آتی است که تکمیل نشده است (در انتظار یا در حال اجرا آینده).

می توان از زمان استفاده برای کنترل حداکثر تعداد ثانیه برای انتظار قبل از بازگشت استفاده کرد. مدت زمان می تواند یک int یا شناور باشد. اگر مدت زمان مشخص نشده یا هیچ کدام ، محدودیتی برای زمان انتظار وجود ندارد.

Retu_hen نشان می دهد چه زمانی این عملکرد باید برگردد. این باید یکی از ثابت های زیر باشد:

این عملکرد در صورت اتمام هر آینده یا لغو آینده باز خواهد گشت.

هنگامی که هر آینده با بالا بردن یک استثناء تمام شود ، این عملکرد باز می گردد. اگر آینده ای یک استثناء ایجاد نکند ، معادل All_completed است.

این عملکرد با پایان یافتن همه آتی یا لغو آینده باز می گردد.

یک تکرار کننده را در مورد نمونه های آینده (احتمالاً توسط نمونه های مختلف مجری ایجاد شده است) که توسط FS ارائه شده است و به محض اتمام آنها (آتی تمام شده یا لغو شده) را به دست می آورد. هر آینده ای که توسط FS که تکثیر شده است یک بار بازگردانده می شود. هر آینده ای که قبل از AS_COMPLETED () تکمیل شده باشد ، ابتدا به دست می آید. اگر __next __ () فراخوانده شود ، تکرار کننده بازگردانده می شود و نتیجه پس از ثانیه از تماس اصلی به AS_Completed () در دسترس نیست. مدت زمان می تواند یک int یا شناور باشد. اگر مدت زمان مشخص نشده یا هیچ کدام ، محدودیتی برای زمان انتظار وجود ندارد.

PEP 3148 - Futures - محاسبات را به صورت غیر همزمان انجام دهید

پیشنهادی که این ویژگی را برای گنجاندن در کتابخانه استاندارد پایتون شرح داده است.

کلاسهای استثنا

هنگامی که آینده لغو می شود ، مطرح می شود.

استثناء همزمان. Timeouterror ¶

یک نام مستعار مستهلک از Timeouterror ، هنگامی که یک عملیات آینده بیش از زمان مشخص شده است ، مطرح می شود.

در نسخه 3. 11 تغییر کرده است: این کلاس به عنوان نام مستعار Timeouterror ساخته شده است.

حاصل از RuntimeError ، این کلاس استثناء هنگامی مطرح می شود که یک مجری به دلایلی شکسته شود و از آن برای ارائه یا اجرای کارهای جدید استفاده نمی شود.

جدید در نسخه 3. 7.

هنگامی که عملیاتی در آینده ای انجام می شود که در وضعیت فعلی مجاز نیست ، مطرح می شود.

جدید در نسخه 3. 8.

این کلاس استثنائی که از Brokenextour مشتق شده است ، هنگامی که یکی از کارگران یک موضوع نخست وزیر در آغاز کار خود قرار گرفته است ، مطرح می شود.

جدید در نسخه 3. 7.

این کلاس استثنائی که از Brokenextour (که قبلاً RuntimeRoror بود) مشتق شده است ، هنگامی که یکی از کارگران یک پردازنده پردازنده به روشی غیر تمیز خاتمه یافته است (برای مثال ، اگر از خارج کشته شود).

تجارت با گزینه‌‌های باینری...
ما را در سایت تجارت با گزینه‌‌های باینری دنبال می کنید

برچسب : نویسنده : نازنین فراهانی بازدید : 42 تاريخ : سه شنبه 16 خرداد 1402 ساعت: 20:55