Get Mystery Box with random crypto!

این پست رو دیدم و چون در کانال منتشر شده و افرادی اون رو دیده‌ | بنیاد پایتون کاران فارسی

این پست رو دیدم و چون در کانال منتشر شده و افرادی اون رو دیده‌اند باید راجع بهش صحبت کنم.

کدی که در قسمت async عه این ویدیو استفاده شده، کد درستی نیست و هیچ فایده‌ای برای کاری که ‌می‌خواسته انجام بده نداشته و اصلا ممکنه ضرر هم داشته باشه. (یعنی ممکنه کندتر هم بشه)

در اون تابع main_aiohttp اصلا الگوریتم درستی بکار نرفته و همین باعث شده که از لایبرری aiohttp، عملا استفاده‌ای نشه.
مشکل اصلی این تابع همون حلقه for عی هست که تک تک url میگیره و بعدش از اون در context manager عه session که بالاتر از aiohttp گرفته شده، استفاده میشه.
اما اگه از این روش برای requests استفاده کنیم، هیچ ضرری نکردیم، چون بهرحال requests از blocking sockets استفاده میکنه.

در این مسئله هدف اینه که ما از نهایت زمان‌ تلف شده (یعنی انتظار برای تموم شدن درخواست قبلی و رفتن به url بعدی. که کاملا در مثال اول یعنی از استفاده از requests مشهوده) برای get کردن اون url استفاده کنیم، و همه درخواست‌هامون رو باهم بفرستیم. اما در تابع main_aiohttp در این ویدیو روشی که استفاده شده هیچ فرقی با روش requests نداره و کاملا sync اجرا میشه. این رو دقیقا میشه از *دونه دونه* درخواست زده شدن در ورژن async و صبر کردن هر درخواست برای تموم شدن درخواست قبلی در ویدیو فهمید.

در ضمن نوشتن کد async نه همیشه لازمه و نه اونقدرها ساده، که بشه راحت نوشتنش، چنین اشتباهاتی براحتی رخ میدن

کد صحیح (و نمونه کد غلط) اینجا هستن.
code: sync_async_aiohttp

در ویدیو به سه صورت (requests، حالت درست async و غلط async) چند بار به سایت‌های مختلف درخواست زدم و تایم‌هاشون رو نشون دادم
video: لینک

[اگر] هم میخواید یک ویدیو هم برای تحلیل کد (هم اشتباهش هم درستش) می‌ذارم کانال


@PSFarsi