این تمرینها بر پایهی درس کلاس ThreadPoolExecutor هستند.
تمرین ۱ (مفهومی)
پارامتر max_workers در ThreadPoolExecutor چه چیزی را کنترل میکند؟
تمرین ۲ (مفهومی)
در مثال اول درس، چرا سومین تسک باید منتظر بماند تا یکی از دو تسک اول تمام شود؟
تمرین ۳ (مفهومی)
در مثال دوم، نقش executor.submit در مقایسه با executor.map چیست؟
تمرین ۴ (مفهومی)
برای اینکه مقدار بازگشتی یک تسک که با executor.submit ارسال شده را بگیریم، از چه متدی استفاده میکنیم؟
تمرین ۵ (کد)
با ThreadPoolExecutor و max_workers=2 یک تابع یکثانیهای را روی پنج ورودی با map اجرا کنید و توضیح دهید چرا فقط دو کار همزمان اجرا میشوند.
تمرین ۶ (کد)
تابعی بنویسید که مقدار برمیگرداند و با submit چهار کار بفرستید؛ سپس همهی نتایج را با .result() جمعآوری و چاپ کنید.
تمرین ۷ (کد واقعی)
یک تابع fetch(url) بنویسید که کار شبکه را با sleep[2] شبیهسازی کند. با ThreadPoolExecutor هشت دانلود را همزمان اجرا کنید و زمان کل را چاپ کنید.
تمرین ۸ (مفهومی)
چه زمانی باید از ThreadPoolExecutor و چه زمانی از ProcessPoolExecutor استفاده کرد؟ چرا تردها برای کارهای CPU-bound مناسب نیستند؟