TorhamDev | تورهام 😳 – Telegram
TorhamDev | تورهام 😳
2.84K subscribers
421 photos
49 videos
21 files
591 links
code, linux and anything related.

• YouTube
youtube.com/@techwithtori

• CodeNaline Podcast
@CodeNaline

• Group
@GothamProgrammers

• Github
github.com/TorhamDev

• Email
torhamdev@gmail.com
Download Telegram
میخام یک زبان برنامه‌نویسی بنویسم :)))))))
🎄13🌚6🤣51
link: https://youtu.be/_vWJgD30FjE

آموزش FastAPI با تورهام، قسمت هجده‌ام - Exception Handling

بیایید ارور‌ها درست هندل کنیم! 🗣
#FastAPI_Course

👾 @TorhamDevCH
👍1
TorhamDev | تورهام 😳
https://github.com/TorhamDev/Slow-Laggy بله داشتم میگفتم که من فاندر آهسته ترین زبان برنامه‌نویسی جهان هستم 🤝
همینک به صورت رسمی زبان slow laggy را به دنیا معرفی میکنم. کندترین زبان برنامه‌نویسی جهان!. قدرت گرفته از پایتون🗿🍻
👏7🤨2😨1
تبریک به علی برنده خوشانس
کتاب ها تمام نشده است!. نگران مباشید!
👍2🎃1
دوستان اولین باگ جهان.

👾 @TorhamDevCH
7
Forwarded 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")


ایراد کد رو پیدا کنید.

راهنما
یی: کاری با اینکه تو روتر بهتره مستقیم درخواست نزنیم ندارم یا مثلا ارور هندلینگ خود درخواست. هدف این سوال یک مشکل خیلی بزرگ تره که کل اپلیکیشن رو تحت شعاع قرار میده.

@ManiFoldsPython
👍3
Forwarded 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
👍8
دیزاین پترن Factory یکی از الگوهای مهم برنامه نویسی است.

فکر کنید که شما باید آبجکتی با یک سری خصوصیات و عملکردهای خاص بسازید. حالت اولیه این است که شما یک کلاس را مستقیماً می‌نویسید و یک آبجکت از آن ایجاد می‌کنید.اما ممکن است به دلایل مختلف شما نخواهید کلاس را مستقیماً بسازید. به جای آن از factory استفاده میکنید.

در اینجا کلاسی به عنوان FactoryClass تعریف می‌کنیم که یک متد build را دارد. این متد یک instance از کلاس مورد نظر شما را برای شما ایجاد می‌کند و آن را برمی‌گرداند.

class FactoryClass:
def build(self, type):
if type == 'TypeA':
return TypeA()
elif type == 'TypeB':
return TypeB()


برای استفاده از این الگو، شما ابتدا یک instance از کلاس factory را ایجاد می‌کنید و سپس با فراخوانی متد build آن را با نوع مورد نظر شما، instance از کلاس مورد نظر بسازید.

factory = FactoryClass()
object_a = factory.build('TypeA')


این الگو بسیار پرکاربرد است و به راحتی می‌توان با آن آبجکت‌های مختلفی در زمان اجرا به سادگی ایجاد کرد.

امیدوارم که این مطلب برای شما مفید بوده باشد. برای کسب اطلاعات بیشتر در این مورد، می‌توانید به منابع زیر مراجعه کنید:

- https://refactoring.guru/design-patterns/factory-method
- https://realpython.com/factory-method-python/

نوشته شده توسط هوش فیک 😆

👾 @TrohamDevCH
4👌2
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/

👾 @TrohamDevCH
👏3
آمار گیری جهت هدف دادن به محتوا چنل.

کدوم مورد شما ترجیح میدید محتوا دربارش باشه؟
Anonymous Poll
49%
مفاهیم پایتون و برنامه‌نویسی به زبان پایتون
58%
مفاهیم و ابزارها بک‌اند (مستقل از زبان)
33%
میکروسرویس
28%
دواپس
فیچر if به زبان slow laggy اضافه شد!. از این پس میتونید از شرط if و یک معادله در برابرش استفاده کنید. برای مثال 3 > 7 یا هر شکل معادله‌ای که نتیجه ای True یا False داشته باشه!.

https://github.com/TorhamDev/Slow-Laggy

یادتون نره به این زبان فوق‌العاده استار بدید!
66🎉57🥰56👍55👏51😁47🔥46🙏3
تفاوت Decimal و Float چیه؟
به نظرم حتما مقاله رو هم کامل بخونید که مثل من سوتی ندید :)))
https://medium.com/@mayuribudake999/difference-between-decimal-and-float-eede050f6c9a

@TorhamDevCH
بلاخره یکی حرف منو زد :). لازم نیست همتون متخصص هوش مصنوعی بشید!. شخصا من distributed systems برای جذاب تره.
@TorhamDevCH
👍13
الستیک سرچ ( Elasticsearch ) یکی از پرکاربردترین ابزارهای جستجوی متن‌باز و تحلیل داده است که برای نگهداری، جستجو، جمع‌آوری و تجزیه و تحلیل داده‌هایی در زمینه‌های مختلف مثل لاگ‌ها استفاده میشه.

کاربرد اصلی Elasticsearch در برنامه نویسی، امکان ایجاد و سازماندهی پایگاه داده‌های جستجوپذیر و درک و جستجوی سریع در داده‌های بزرگ. با استفاده از Elasticsearch میتونیم دیتای مورد نظر رو سریع جست‌وجو کنیم و نتیجه رو خیلی راحت پردازش کنیم.

الستیک سرچ یک سری API داره که میتونیم ازشون استفاده کنیم. تو قالب‌ زبان‌های برنامه‌نویس ساپورت میشه. داخل پایتون هم یک کتابخونه براش توسعه دادن که با اون میتونید از قابلیت‌هاش استفاده کنید.

برای استفاده ازش میتونید با دستور زیر کتابخانه مربوطش رو در پایتون نصب کنید:

pip install elasticsearch
حال میتونیم از Elasticsearch در برنامه‌های پایتونی خودمون استفاده کنیم. به عنوان مثال، فرض کنید مواردی از یک فروشگاه اینترنتی رو داخل Elasticsearch ذخیره کرده‌ایم و میخواییم برای جستجوی محصولات از Elasticsearch استفاده کنیم. با استفاده از کد زیر، میتونیم با Elasticsearch ارتباط بگیریم و سرچ رو برای محصولاتی با اسم "موبایل" انجام بدیم:

from elasticsearch import Elasticsearch

# ایجاد یک شیء از Elasticsearch
es = Elasticsearch()

# تعریف یک query جستجویی
query = {
"query": {
"match": {
"product_name": "موبایل"
}
}
}

# اجرای جستجو
results = es.search(index="my_index", body=query)

# چاپ نتیجه
for hit in results['hits']['hits']:
print(hit['_source']['product_name'])
تو کد، ما یک شیء از کلاس Elasticsearch ایجاد کردیم و یک query برای جستجو داخل Elasticsearch تعریف کرده‌ایم. بعدش سرچ با استفاده از Elasticsearch انجام داده‌ایم و نتیجش رو به صورت یک لیست از JSON objects دریافت کردیم.

الستیک خیلی جاها کاربرد داره برای مثال لاگ‌ها یک سرویس میشه داخلش ذخیره کرد و crash و ارورها داخلش جستجو کرد :).

بیشتر شرکت‌های ایرانی و خارجی ازش استفاده میکنن و بلد بودنش به نظر میتونه یک پوینت مثبت باشه.

👾 @TorhamDevCH
👍91
چیز‌هایی که خوبه یاد داشته باشیم اگه دنبال قدم بعدی در دنیا بک‌اند میگردید:

1. داکر ( دیگه باید همه بلد باشن :) )
2. لینوکس ( اگه بک‌اند کارید قطعا! )
3. ردیس ( اینم مثل داکر )
4. ربیت ام‌کیو ( ردیس همین کار رو هم میکنه ولی اینو خیلی جاها میخان)
5. الستیک‌سرچ ( پست بالا )
6. میکروسرویس( تو لول ها بالاتر، و کلا distributed systems )
7. خود SQL (میتونه خیلی کمک کنه در آینده بهتون)
8. پست‌گرس اسکیول ( دیتابیس رایج خیلی‌هاست)
9. دیزاین پترن ( به عنوان یک دولوپر دونست‌اش خیلی کمک میکنه. البته تو ایران خیلی‌ها میپرسن تو مصاحبه)
10. کوبرنتیز :)

در کنار اینا قطعا داشتن یک درک خوب از خود HTTP مهمه و خیلی چیزای دیگه که در این لحظه یادم نمیاد. از این لیست خیلی‌هاشو خود منم هنوز یاد ندارم، ولی یاد خواهم گرفت؟ قطعا.

بعدا برای همه اینایی که تو لیست گفتم دوره آموزش مناسب میزارم. احتمالا پست بعدی بشه این :)

👾 @TorhamDevCH
👍141