| کانال توسعه‌دهندگان |: پست #90 — TG.ME

تو کدهای async اگه وسط کوروتین بری یه تابع بلاک‌کننده معمولی (مثلاً یه request سنگین) صدا بزنی، عملاً event loop رو می‌خوابی و کل مزیت async می‌پره.

توی مثال اول، تابع fetch_url مستقیماً از requests.get استفاده کرده و کل event loop رو بلاک می‌کنه؛ اگه چند تا fetch_url رو با هم gather کنی، عملاً به‌جای اجرای هم‌زمان، پشت سر هم اجرا می‌شن.

توی روش دوم، همون کار رو می‌بریم توی run_in_executor که I/O بلاک‌کننده رو بندازه روی thread جدا. این‌طوری event loop آزاد می‌مونه، کوروتین‌ها واقعاً concurrent اجرا می‌شن و تحت فشار تعداد زیاد request، برنامه خیلی روان‌تر عمل می‌کنه.

اگه مجبوری از کتابخونه‌های blocking مثل requests استفاده کنی، حتماً یه چیزی شبیه روش دوم پیاده کن یا کلاً مهاجرت کن به نسخه async اون کتابخونه (مثلاً به‌جای requests از httpx.AsyncClient یا aiohttp استفاده کن).

🔖 #Programming #برنامه_نویسی

👤 Developix

💎 Channel: @DevelopixChannel
۲۶ شهریور ۱۴۰۵ ۴۸۸ ۱