این تمرینها بر پایهی درس مروری بر coroutine هستند.
تمرین ۱ (مفهومی)
کدام دو ویژگی یک تابع معمولی را به یک coroutine تبدیل میکنند؟ یعنی تعریف یک coroutine باید چه دو شرطی داشته باشد؟
تمرین ۲ (مفهومی)
اگر یک coroutine را عیناً مثل یک تابع معمولی فراخوانی کنیم (بدون await و بدون asyncio.run)، چه اتفاقی میافتد و چرا؟
تمرین ۳ (مفهومی)
چرا برای شبیهسازی یک عملیات زمانبر درون یک coroutine نمیتوانیم از time.sleep استفاده کنیم؟ بهجایش از چه تابعی باید استفاده کرد؟
تمرین ۴ (مفهومی)
از بین سه روش اجرای coroutine، کدام روش باعث میشود coroutineها یکی پس از دیگری اجرا شوند نه همزمان؟ و کدام روش برای اجرای همزمان چند coroutine توصیه میشود؟
تمرین ۵ (کد)
توضیح دهید چرا صداکردن دو بار asyncio.run پشتسرهم، کارها را ترتیبی اجرا میکند. سپس کد را طوری بازنویسی کنید که دو دانلود واقعاً همزمان اجرا شوند.
تمرین ۶ (کد)
یک coroutine به نام download_file(name) بنویسید و با create_task و gather پنج فایل را همزمان دانلود کنید و زمان کل را چاپ کنید.