این بسته یک نوع آینده را فراهم می کند که یک اجرای ناهمزمان و مجموعه ای از توابع ابزار را برای ساده سازی عملیات در اشیاء آینده محاصره می کند. در حال حاضر ، نوع آینده در درجه اول توسط چارچوب RPC توزیع شده استفاده می شود.
Class Torch. Futures. آینده ( * ، دستگاه ها = هیچ)
بسته بندی اطراف یک مشعل. rpc_async (). همچنین مجموعه ای از API ها را برای اضافه کردن توابع پاسخ به تماس و تعیین نتایج در معرض دید قرار می دهد.
پشتیبانی GPU یک ویژگی بتا است که در معرض تغییرات است.
عملکرد پاسخ به تماس داده شده را به این آینده اضافه کنید ، که با اتمام آینده اجرا می شود. تماس های چندگانه را می توان به همان آینده اضافه کرد ، اما ترتیب اجرای آنها نمی تواند تضمین شود. پاسخ به تماس باید یک استدلال را مطرح کند ، که این اشاره به این آینده است. عملکرد پاسخ به تماس می تواند از روش () مقدار () برای به دست آوردن مقدار استفاده کند. توجه داشته باشید که اگر این آینده از قبل به پایان برسد ، پاسخ تماس داده شده به صورت خطی اجرا می شود.
توصیه می کنیم از روش سپس () استفاده کنید زیرا راهی برای همگام سازی پس از اتمام پاسخ به تماس شما فراهم می کند. add_done_callback می تواند ارزان تر باشد اگر پاسخ تماس شما چیزی برنگردد. اما هر دو () و ADD_DONE_CALLBACK از همان API ثبت نام پاسخ به زیر کاپوت استفاده می کنند.
با توجه به تانسرهای GPU ، این روش به همان روشی که در آن زمان () رفتار می کند.
پاسخ به تماس (آینده) - تماس تلفنی که یک استدلال را در بر می گیرد ، که اشاره به این آینده است.
توجه داشته باشید که اگر عملکرد پاسخ به تماس ، یا از طریق آینده اصلی با استثناء و فراخوانی Fut. wait () یا از طریق کد دیگر در پاسخ به تماس ، انجام شود ، باید با دقت از آن مراقبت کرد. به عنوان مثال ، اگر این پاسخ بعداً آینده های اضافی را تکمیل کند ، آن آینده ها به صورت خطا مشخص نمی شوند و کاربر مسئول انجام تکمیل/انتظار برای آن آینده ها به طور مستقل است.
اگر این آینده تمام شود ، درست برگردید. اگر نتیجه یا یک استثنا باشد ، آینده انجام می شود.
اگر مقدار حاوی تانسور هایی باشد که در GPU ها زندگی می کنند ، Future. done () حتی اگر هسته های ناهمزمان که در حال جمع شدن آن تنسورها هستند هنوز اجرا را روی دستگاه انجام نداده اند ، درست باز می گردد ، زیرا در چنین مرحله ای نتیجه قابل استفاده است ، یک مورد قابل استفاده است. همگام سازی های مناسب را انجام می دهد (به انتظار () مراجعه کنید).
یک استثنا برای این آینده تنظیم کنید، که این آینده را به عنوان تکمیل شده با یک خطا علامت گذاری می کند و همه تماس های پیوست شده را فعال می کند. توجه داشته باشید که هنگام فراخوانی wait()/value() در این Future، استثنایی که در اینجا تنظیم شده است به صورت درون خطی افزایش می یابد.
نتیجه (BaseException) - استثنا برای این آینده.
نتیجه را برای این آینده تنظیم کنید، که این آینده را به عنوان تکمیل شده علامت گذاری می کند و همه تماس های ضمیمه را فعال می کند. توجه داشته باشید که یک آینده را نمی توان دو بار تکمیل شده علامت گذاری کرد.
اگر نتیجه شامل تانسورهایی باشد که روی پردازنده های گرافیکی قرار دارند، این روش می تواند فراخوانی شود، حتی اگر هسته های ناهمزمان که آن تانسورها را پر می کنند، هنوز در دستگاه اجرا نشده باشند، مشروط بر اینکه جریان هایی که آن هسته ها روی آن ها قرار گرفته اند به عنوان جریان تنظیم شوند. زمانی که این روش فراخوانی می شود. به زبان ساده، فراخوانی این روش بلافاصله پس از راه اندازی آن هسته ها، بدون هیچ گونه همگام سازی اضافی، بی خطر است، تا زمانی که جریان های بین آن ها را تغییر ندهید. این روش رویدادها را در تمام جریان های جاری مرتبط ثبت می کند و از آنها برای اطمینان از زمان بندی مناسب برای همه مصرف کنندگان آینده استفاده می کند.
نتیجه (شیء) نتیجه شیء این آینده.
تابع تماس داده شده را به این Future اضافه کنید، که پس از تکمیل Future اجرا می شود. چند تماس برگشتی را می توان به همان Future اضافه کرد، اما ترتیب اجرای آنها را نمی توان تضمین کرد (برای اجرای یک دستور خاص، زنجیره را در نظر بگیرید: fut. then(cb1). then(cb2)). تماس برگشتی باید یک آرگومان داشته باشد که ارجاع به این آینده است. تابع callback می تواند از متد value() برای بدست آوردن مقدار استفاده کند. توجه داشته باشید که اگر این Future قبلاً تکمیل شده باشد، تماس داده شده بلافاصله به صورت خطی اجرا می شود.
اگر مقدار Future حاوی تانسورهایی باشد که در پردازنده های گرافیکی قرار دارند، ممکن است در حالی که هسته های ناهمگامی که آن تانسورها را پر می کنند، اجرای فراخوانی را در دستگاه به پایان نرسانده باشند. با این حال، تماس برگشتی با برخی از جریان های اختصاصی که به عنوان جریان تنظیم شده اند (که از یک استخر جهانی واکشی شده اند) فراخوانی می شود که با آن هسته ها همگام سازی می شوند. از این رو هر عملیاتی که توسط تماس برگشتی روی این تانسورها انجام شود، پس از تکمیل کرنل ها در دستگاه برنامه ریزی می شود. به عبارت دیگر، تا زمانی که تماس برگشتی جریان ها را تغییر ندهد، می تواند با خیال راحت نتیجه را بدون هیچ هماهنگی اضافی دستکاری کند. این شبیه به رفتار غیر مسدود کردن () wait است.
به همین ترتیب ، اگر پاسخ به تماس با مقداری که حاوی تانسور است که در یک GPU ساکن هستند ، بازگردد ، می تواند این کار را انجام دهد ، حتی اگر هسته هایی که این تنش ها را تولید می کنند هنوز روی دستگاه کار می کنند ، تا زمانی که پاسخ به تماس در هنگام اجرای آن جریان را تغییر ندهدواداگر کسی بخواهد جریانها را تغییر دهد ، باید مراقب باشید که آنها را با جریان های اصلی همگام سازی کنید ، یعنی مواردی که هنگام فراخوانی از تماس ، جاری بودند.
پاسخ به تماس (قابل تماس) - تماس تلفنی که این آینده را به عنوان تنها استدلال در نظر می گیرد.
یک شیء آینده جدید که ارزش بازگشت پاسخ به تماس را در خود جای داده و پس از اتمام پاسخ پاسخ داده شده ، به پایان می رسد.
توجه داشته باشید که اگر عملکرد پاسخ به تماس پرتاب شود ، یا از طریق آینده اصلی با استثناء و فراخوانی Fut. wait () یا از طریق کد دیگر در پاسخ به تماس ، آینده بازگردانده شده با خطای روبرو مشخص می شود. با این حال ، اگر این پاسخ بعداً آینده های اضافی را تکمیل کند ، آن آینده ها به صورت خطا مشخص نمی شوند و کاربر مسئول انجام تکمیل/انتظار برای آن آینده ها به طور مستقل است.
ارزش آینده ای را که از قبل تکمیل شده است بدست آورید.
این روش فقط باید پس از اتمام تماس () یا در داخل یک عملکرد پاسخ به تماس به آن () ارسال شود. در موارد دیگر ، این آینده ممکن است هنوز یک ارزش داشته باشد و ارزش فراخوانی () می تواند شکست بخورد.
اگر مقدار حاوی تانسور باشد که در GPU ها ساکن هستند ، این روش همگام سازی اضافی را انجام نمی دهد. این کار باید از قبل ، به طور جداگانه ، از طریق تماس برای انتظار () (به جز در تماس های برگشتی ، که در آن زمان از آن مراقبت می شود () انجام شود.
ارزش این آینده. اگر عملکرد (پاسخ به تماس یا RPC) ایجاد مقدار خطایی را به وجود آورد ، این روش () نیز خطایی را به وجود می آورد.
بلوک تا زمانی که ارزش این آینده آماده شود.
اگر مقدار حاوی تانسور باشد که در GPU ها ساکن هستند ، یک هماهنگ سازی اضافی با هسته (اجرای دستگاه) انجام می شود که ممکن است به طور همزمان آن تنش ها را جمع کند. چنین همگام سازی غیر مسدود کننده است ، به این معنی که انتظار () دستورالعمل های لازم را در جریان های فعلی وارد می کند تا اطمینان حاصل شود که عملیات بیشتر در آن جریان ها به درستی پس از هسته های Async برنامه ریزی می شوند ، اما پس از انجام این کار ، صبر کنید ()بازگشت ، حتی اگر این هسته ها هنوز در حال اجرا باشند. در هنگام دسترسی و استفاده از مقادیر ، هماهنگ سازی دیگری لازم نیست ، تا زمانی که کسی جریان را تغییر ندهد.
ارزش نگهداری شده توسط این آینده. اگر تابع (بازخوانی یا RPC) که مقدار را ایجاد می کند، خطایی ایجاد کرده باشد، این روش انتظار نیز یک خطا ایجاد می کند.
مشعل. آینده. collect_all ( آتی ) [منبع] ¶
اشیاء Future ارائه شده را در یک Future ترکیبی جمع می کند که با تکمیل تمام آتی فرعی تکمیل می شود.
آتی (لیست) - لیستی از اشیاء آینده.
یک شی Future را به لیستی از موارد ارسال شده در Futures برمی گرداند.
منتظر می ماند تا تمام قراردادهای آتی ارائه شده کامل شوند و لیست مقادیر تکمیل شده را برمی گرداند. اگر هر یک از معاملات آتی با خطا مواجه شود، روش زودتر از آن خارج می شود و خطا را گزارش می کند و منتظر تکمیل قراردادهای آتی دیگر نیست.
آتی (لیست) - فهرستی از شیء آینده.
لیستی از نتایج تکمیل شده آینده. این روش در صورت منتظر ماندن در پرتاب های آینده، خطا ایجاد می کند.
سیگنالهای معاملاتی...
ما را در سایت سیگنالهای معاملاتی دنبال می کنید
برچسب :
نویسنده : عارف لرستانی
بازدید : <-PostHit->
تاريخ : جمعه
25 فروردين
1402 ساعت: 12:13