multiprocessing.Queue – صف های شغلی مشترک
<a href=”https://multiprocessing.queue/”>multiprocessing.Queue</a> – صف های شغلی مشترک
این یک اجرای صف کار مشترک است که به موارد در صف اجازه می دهد
به طور موازی توسط چندین کارگر همزمان پردازش شود.38 موازی سازی مبتنی بر فرآیند در CPython به دلیل قفل جهانی تعبیر کننده (GIL) که از برخی اشکال اجرای موازی در یک دستگاه جلوگیری می کند، محبوب است.
فرآیند مترجم واحد
به عنوان یک پیاده سازی صف تخصصی برای به اشتراک گذاری داده ها
بین فرآیندها، multiprocessing.Queue توزیع کار را در چندین فرآیند به منظور کار در اطراف آسان می کند.
محدودیت های GIL این نوع صف می تواند هر کدام را ذخیره و انتقال دهد
شیء قابل ترشی در سراسر مرزهای فرآیند.
from multiprocessing import Queue
q = Queue()
q.put(‘eat’)
q.put(‘sleep’)
q.put(‘code’)
q
q.get()
‘eat’
q.get()
‘sleep’
q.get()
‘code’
q.get()Blocks / waits forever…
صف های اولویت دار
صف اولویت یک ساختار داده کانتینری است که مجموعه ای از را مدیریت می کند
رکوردهایی با کلیدهای کاملاً مرتب شده 39 (به عنوان مثال، وزن عددی
ارزش) برای دسترسی سریع به رکورد با کوچکترین یا بزرگترین
کلید در مجموعه
میتوانید صف اولویتدار را بهعنوان یک صف اصلاحشده در نظر بگیرید: به جای بازیابی عنصر بعدی با زمان درج، عنصر با اولویت بالاتر را بازیابی میکند. اولویت عناصر فردی توسط
ترتیب روی کلیدهای آنها اعمال شد.
صف های اولویت معمولاً برای رسیدگی به مشکلات زمان بندی استفاده می شوند، به عنوان مثال، برای اولویت دادن به وظایف با فوریت بالاتر.
به کار یک زمانبندی وظایف سیستم عامل فکر کنید:
در حالت ایدهآل، وظایف با اولویت بالا در سیستم (به عنوان مثال، انجام یک بازی بلادرنگ) باید اولویت داشته باشند.
وظایف با اولویت پایین تر (به عنوان مثال، دانلود به روز رسانی در
زمینه). با سازماندهی وظایف معلق در اولویت
صفی که از فوریت کار به عنوان کلید، وظیفه استفاده می کند
زمانبند می تواند به سرعت وظایف با بالاترین اولویت را انتخاب کند
و اجازه دهید ابتدا اجرا شوند.
در این فصل چند گزینه برای نحوه پیاده سازی آن مشاهده خواهید کرد
صفهای اولویتدار در پایتون با استفاده از ساختارهای داده داخلی یا ساختارهای دادهای که با کتابخانه استاندارد پایتون ارسال میشوند. هر اجرا
مزایا و معایب خاص خود را خواهند داشت، اما در ذهن من یک وجود دارد
برنده واضح برای اکثر سناریوهای رایج بیایید بفهمیم کدام یک است
است.
لیست – حفظ یک صف مرتب شده دستی
می توانید از یک لیست مرتب شده برای شناسایی سریع و حذف کوچکترین آنها استفاده کنید
یا بزرگترین عنصر نکته منفی این است که قرار دادن عناصر جدید در یک لیست یک عملیات O(n) کند است.
در حالی که نقطه درج را می توان در زمان O(log n) با استفاده یافت
bisect.insort40 در کتابخانه استاندارد، این همیشه تحت سلطه است
با مرحله درج آهسته
حفظ نظم با الحاق به لیست و مرتب سازی مجدد نیز
حداقل O(n log n) زمان می برد. نکته منفی دیگر این است که شما باید همیشه مراقب مرتب سازی مجدد لیست در هنگام درج عناصر جدید باشید.
با از دست دادن این مرحله، معرفی اشکالات آسان است و بار آن بر عهده شما، توسعه دهنده است.
بنابراین، من معتقدم که لیست های مرتب شده فقط به عنوان اولویت مناسب هستند
صف زمانی که تعداد کمی درج وجود خواهد داشت.
قوانین ارسال دیدگاه در سایت