در پایتون با استفاده از concurrent.futures یک برنامه بنویسید که به‌صورت هم‌زمان (concurrent) چند فایل متنی را پردازش کند و مجموع تعداد خطوط هر فایل را محاسبه و چاپ نماید.

21.0 بازدید آخرین ویرایش در 198 روز قبل ساعت 04:28

0.0

برای حل این مسأله یک تابع کمکی بنویسید که تعداد خطوط یک فایل را می‌شمرد، سپس با استفاده از concurrent.futures.ThreadPoolExecutor یا ProcessPoolExecutor برای اجرای هم‌زمان این تابع روی فهرست فایل‌ها استفاده کنید؛ برای کارهای I/O-bound (خواندن فایل) معمولاً ThreadPoolExecutor مناسب است و برای کارهای CPU-bound از ProcessPoolExecutor بهره ببرید. از with برای مدیریت executor، از submit یا map برای ارسال تسک‌ها و از as_completed برای جمع‌آوری نتایج استفاده کنید، خطاها را با try/except مدیریت کنید و تعداد workerها را به اندازه منابع سیستم محدود نمایید؛ در محیط‌های real-time یا HPC به نکاتی مانند زمان‌بندی، جلوگیری از مسدود شدن و تقسیم‌بندی داده‌ها (chunking) توجه کنید.

توسط پژوهشگر در 198 روز قبل ساعت 04:28
دسته بندی ها: Python Python for beginner
nima در 198 روز قبل ساعت 04:29

برای خواندن و شمارش خطوط چند فایل متنی به‌صورت هم‌زمان معمولاً ThreadPoolExecutor به‌صرفه‌تر است چون کار I/O-bound است و GIL مشکل‌ساز نیست. در تابع کمکی از with open(...) و حلقه روی فایل (iterating line-by-line) استفاده کنید تا فایل‌های بزرگ حافظه را پر نکنند و در داخل تابع try/except برای مدیریت خطاها قرار دهید. از with برای مدیریت executor و یا submit+as_completed برای جمع‌آوری نتایج یا map برای سادگی بهره ببرید و تعداد workerها را براساس منابع (مثلاً os.cpu_count() یا یک حد معقول) محدود کنید. اگر پردازش بعدی CPU-bound شد یا شما پردازش سنگینی روی هر خط انجام می‌دهید، به جای ThreadPoolExecutor از ProcessPoolExecutor استفاده کنید.

گزارش

1 پاسخ

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

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