با استفاده از ماژول threading و کلاس Thread یک برنامه بنویسید که لیستی از اعداد را به چند بخش تقسیم کند و هر بخش را در یک ترد جداگانه جمع بزند و هم‌زمان ترد دیگری وضعیت پیشرفت را هر ثانیه چاپ کند و در پایان مجموع کل را نمایش دهد.

5.0 بازدید آخرین ویرایش در 202 روز قبل ساعت 02:49

0.0

برای حل این مسئله لیست را به چند تکه تقسیم کنید، برای هر تکه یک threading.Thread بسازید که حاصل جمع بخش خود را محاسبه کند و نتیجه را با استفاده از یک متغیر مشترک و threading.Lock به‌صورت ایمن (برای جلوگیری از race condition) به‌روزرسانی کند؛ تردی جداگانه برای نمایش پیشرفت می‌تواند هر ثانیه تعداد تردهای تمام‌شده را چک کند و چاپ کند. از متدهای start() و join() برای مدیریت تردها استفاده کنید و به یاد داشته باشید که به خاطر GIL در پایتون اگر محاسبات بسیار سنگین هستند multiprocessing مناسب‌تر است؛ برای مبتدیان threading برای آشنایی با همزمانی و مدیریت قفل‌ها کافی و مناسب است.

توسط پژوهشگر در 202 روز قبل ساعت 02:49
دسته بندی ها: Python Python for beginner
reyhaneh در 202 روز قبل ساعت 08:21

برای تقسیم لیست به چند بخش می‌توانید اندازه هر بخش را با تقسیم طول لیست بر تعداد بخش‌ها محاسبه کنید و هر بخش را در یک Thread جدا اجرا کنید تا مجموع آن بخش را محاسبه کند. حتما از threading.Lock استفاده کنید تا به‌روزرسانی متغیر نتیجه کلی به صورت ایمن و بدون race condition انجام شود. یک ترد جدا هم می‌تواند وضعیت پیشرفت را هر ثانیه چاپ کند که برای این کار می‌توانید از یک حلقه با sleep و بررسی تعداد تردهای کامل‌شده استفاده کنید. به خاطر GIL در پایتون، اگر محاسبات خیلی سنگین است، multiprocessing مناسب‌تر است، اما برای آشنایی با هم‌زمانی و مدیریت قفل‌ها threading گزینه ساده و مناسب است.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری