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