TorhamDev | تورهام 😳
Ir al canal en Telegram
2 869
Suscriptores
Sin datos24 horas
+107 días
+6330 días
Archivo de publicaciones
2 869
asyncio.wait_for
...
# execute a task with a timeout
try:
# wait for a task to complete
await asyncio.wait_for(coro, timeout=1)
except asyncio.TimeoutError:
# ...
این کد یک نمونه از استفادهی asyncio.wait_for در برنامهنویسی پایتون است. زمانی که برنامه اجرا میشود، ممکن است که یک عملیات تحت شبکه، مانند ایجاد یک اتصال TCP، زمان بیشتری از حالت معمول برای تکمیل نیاز داشته باشد. در این صورت، استفاده از تابع wait_for، به برنامه نویس این قابلیت را میدهد تا دیگر از حد مورد موردنیاز بیشتر منتظر اتمام عملیات نماند.
در کد ارائه بالا، به جای منتظر ماندن برای اتمام تسک، با استفاده از تابع asyncio.wait_for، حداکثر یک ثانیه منتظر تکمیل تسک میمانیم. اگر تسک در زمان مشخص شده تکمیل نشود، یک asyncio.TimeoutError رخ میدهد.
در مثال بالا، coro میتواند هر گونه coroutine باشد که بتواند در asyncio event loop اجرا شود. با استفاده از تابع asyncio.wait_for، عملیات مشخص شده در این coroutine زمان بیشتری از زمان مشخص شده برای تکمیل آن اجرا شود. به عنوان مثال، ممکن است این coroutine انتظار داشته باشد که اتصالی به یک سرور خاص برقرار شود، اما برای برقراری این اتصال، ممکن است زمان زیادی لازم باشد. با استفاده از asyncio.wait_for، میتوانیم فرآیند اتصال را به حداکثر یک ثانیه محدود کنیم تا از به هم ریختگی برنامه جلوگیری شود. در صورتی که در یک ثانیه اتصال برقرار نشود، یک asyncio.TimeoutError ایجاد میشود که میتواند به عنوان اعلام خطا به کار برود.
مقاله خوب برای مطالعه بیشتر:
- https://superfastpython.com/asyncio-wait_for/
👾 @TrohamDevCH2 869
دیزاین پترن Factory یکی از الگوهای مهم برنامه نویسی است.
فکر کنید که شما باید آبجکتی با یک سری خصوصیات و عملکردهای خاص بسازید. حالت اولیه این است که شما یک کلاس را مستقیماً مینویسید و یک آبجکت از آن ایجاد میکنید.اما ممکن است به دلایل مختلف شما نخواهید کلاس را مستقیماً بسازید. به جای آن از factory استفاده میکنید.
در اینجا کلاسی به عنوان FactoryClass تعریف میکنیم که یک متد build را دارد. این متد یک instance از کلاس مورد نظر شما را برای شما ایجاد میکند و آن را برمیگرداند.
```python
class FactoryClass:
def build(self, type):
if type == 'TypeA':
return TypeA()
elif type == 'TypeB':
return TypeB()
```
برای استفاده از این الگو، شما ابتدا یک instance از کلاس factory را ایجاد میکنید و سپس با فراخوانی متد build آن را با نوع مورد نظر شما، instance از کلاس مورد نظر بسازید.
```python
factory = FactoryClass()
object_a = factory.build('TypeA')
```
این الگو بسیار پرکاربرد است و به راحتی میتوان با آن آبجکتهای مختلفی در زمان اجرا به سادگی ایجاد کرد.
امیدوارم که این مطلب برای شما مفید بوده باشد. برای کسب اطلاعات بیشتر در این مورد، میتوانید به منابع زیر مراجعه کنید:
- https://refactoring.guru/design-patterns/factory-method
- https://realpython.com/factory-method-python/
نوشته شده توسط هوش فیک 😆
👾 @TrohamDevCH2 869
Repost from Python BackendHub
تو کامنتا خیلی سریع به جواب اشاره کردن, وقتی دارین با فست یا هر asgi دیگه ای کار میکنید باید حواستون باشه, که به هیچ وجه هیچ جایی از اپلیکیشنتون تسک IO باند نداشته باشین که بلاک کنه main thread تون رو.
چرا؟چون بای دیفالت روتر async رو ترد اصلی process ران میشه, بنابراین اگه بلاک شه هم ترد اصلیتون بلاک میشه هم process یعنی تو اون پروسه و ورکر دیگه نمیتونید هیچ درخواستی رو return کنید.
راه حلش چیه؟
https://asgi.readthedocs.io/en/latest/introduction.html#wsgi-compatibility
تو fastapi شما میتونید همچنان کدتون رو با sync هم ران کنید. اگه روترتون io bound داره که sync عه و بلاک میکنه میتونید روترتون رو sync کنید. اتفاقی که اون پشت میفته اینه که fastapi میاد درخواست شما رو تو یک ترد جدا هندل میکنه. داخل asgiref هم نمونه مشابهش هست, که sync_to_async هست. خودتونم میتونید مشابهشو بنویسید و تو executor thread ران کنید کنار بقیه کد های async تون. میتونید از لایبری سباستین asyncer هم استفاده کنید که داخلش از AnyIO استفاده کرده که typingتون رو خراب نمیکنه و فیچر های خوبی داره:
https://github.com/tiangolo/asyncer
اما یادتون نره که پرفومنسی تو تسک های IO همیشه async بهتره از thread چون کم هزینه تره, کانتکس سوییچ نداره, استفاده کامل تری از ریسورستون میکنید و البته cpu bound هم بخاطر وجود GIL فعلا تو پایتون تفاوتی ایجاد نمیکنه. نکته ای که باید دقت کنید بهش لایبری که استفاده میکنید بهتره در درجه اول native async باشه یعنی واقعا async باشه و رو یک ترد non blocking کارشو انجام بده. اگه لایبری mature یا خوبی پیدا نکردین در درجه دوم میتونید از همین تکنیکی که گفتم استفاده کنید.
میتونید مقاله زیر رو بخونید که یکم بیشتر با ساختار و معماری asgi و wsgi آشنا شین:
https://medium.com/p/807158ed1d4c
@ManiFoldsPython
2 869
Repost from Python BackendHub
یک سوال نسبتا راحت دارم ازتون, یک نکته ای که باید خیلی بهش دقت کنید موقع کار کردن با fastapi
از ما خواسته شده یک روتری بنویسیم که به ساده ترین شکل ممکن بدون اینکه مشکلی برای اپلیکیشنمون به وجود بیاره به یک اپلیکیشنی یک درخواست بزنه و دیتاشو برگردونه.
from fastapi import FastAPI
import requests
app = FastAPI()
@app.post("/crawl")
async def crawl_website(job_data: str):
return requests.get("https://mywebsite.com")
ایراد کد رو پیدا کنید.
راهنمایی: کاری با اینکه تو روتر بهتره مستقیم درخواست نزنیم ندارم یا مثلا ارور هندلینگ خود درخواست. هدف این سوال یک مشکل خیلی بزرگ تره که کل اپلیکیشن رو تحت شعاع قرار میده.
@ManiFoldsPython2 869
https://meet.google.com/vks-grvt-tqa
بیایید ساعت ۹ شروع میکنم. تا اون موقع میتونید اسمتون وارد گوگل فرم کنید.
2 869
همینک به صورت رسمی زبان slow laggy راه دنیا معرفی میکنم. کندترین زبان جهان!. قدرت گرفته از پایتون🗿🍻
2 869
link: https://youtu.be/_vWJgD30FjE
آموزش FastAPI با تورهام، قسمت هجدهام - Exception Handling
بیایید ارورها درست هندل کنیم! 🗣
#FastAPI_Course
👾 @TorhamDevCH
2 869
https://github.com/TorhamDev/Slow-Laggy
بله داشتم میگفتم که من فاندر آهسته ترین زبان برنامهنویسی جهان هستم 🤝
2 869
لینک قرعهکشی:
https://forms.gle/6KJxGc2KaafNV4DQ9
برای دوستاتون هم بفرستید :)
2 869
این کتاب فردا میخام فردا به یک نفر هدیه بدم. (قبلا هم حرفش بود) کلا دوتا شرط داره
۱. داخل گوگل فرم که میدم آیدیش رو بزنه
۲. اون آیدی جوین چنل تلگرام باشه
شب گوگل فرم رو میزارم. 🤝
2 869
Wubba Lubba Dub Dub
• YouTube
https://youtube.com/@techwithtori
• Twitter
https://twitter.com/TorhamDev
• CodeNaline Podcast
@CodeNaline
• Group
@programmer_dudes
• Github
github.com/TorhamDev
• Email
torhamdev@gmail.com
¡Ya disponible! Investigación de Telegram 2025 — los principales insights del año 
