TorhamDev | تورهام 😳
Ir al canal en Telegram
2 869
Suscriptores
Sin datos24 horas
+107 días
+6330 días
Archivo de publicaciones
2 869
https://dev.arie.bovenberg.net/blog/python-datetime-pitfalls
صبحتون رو با مقاله ای درباره مشکلات(دام)های کتابخونههای datetime در پایتون شروع کنید :)
@TorhamDevCH
2 869
چی از این بهتر که صبح رو با یک مقاله درباره مموری منیجمنت شروع کنید؟
Understanding Memory Management, Part 1: C
https://educatedguesswork.org/posts/memory-management-1
@TorhamDevCH
2 869
به یارو میگم کارتخوان داری میگه نه. میگم کارت داری کارت به کارت کنم میگه نه. ۱۰۰ تومنی میدم بهش میگه خورد ندارم. میگم سید هیچی نداری که. میگه مگه وضیفه منه داشته باشم؟ نه عمو بزار من کارتخوان بگیرم برات 😂😂😂
#موقت
2 869
Repost from Seyed Mahdi Notes
میرور هامون فعلا وصله :)
توی این شرایط شاید به دردتون بخوره
https://mirrors.kubarcloud.com
2 869
بچه ها فعلا ssh tunnel خوب جواب میده اگه حتی سرور خارجی دارید که فعلا ip بلاک نشده میتونید بهش ssh tunnel بزنید.
2 869
اگه یادگرفتن با انجام دادن رو دوست دارید ( learn by doing ) و احتمالا میخوایید لینوکس رو از پایه یاد بگیرید و حال نگاه کردن ۱۲ ساعت دوره و این چیزا رو ندارید. دلتون میخوایید بخونید و تست کنید میتونی از اینجا شروع کنید
https://linuxjourney.com/
بعد از این که linux journey رو تموم کردید یا همزمان با اون میتونید برید داخل over the write و چالش لینوکسیش رو انجام بدید.
https://overthewire.org/wargames/bandit/
این طوری دیگه لازم نیست دوره ببینید یک عمر صرفا بخونید تا اخرش یک دستور ببینید و بگید واستا این چی بود؟
خلاصه دیگه دستور بزنید و خراب کاری کنید یاد بگیرید.
@TorhamDevCH
2 869
parallel with gevent
تو پست قبلی گفتم که gevent چی هست و چطور خوبه ازش استفاده و به چه دردی میخوره. یکی از کارهایی دیگه که باهاش میتونید انجام بدید true parallelism هستش. یعنی چندین تسک رو به صورت همزمان اجرا کنید. برای این کار باید از تکنیکی استفاده کنید به اسم prefork (پریفورک).
اما prefork چی هست؟
پریفورک به شکل ساده میشه زمانی که یک ترد میخاد اجرا بشه و قبل از اجرا شدنش چندین ترد دیگه رو هم اجرا میکنه و این ترد خودش به عنوان ترد master عمل میکنه و بقیه تردها رو کنترل میکنه.
برای مثال ابزار گونیکورن که خیلیهاتو باهاش آشنا هستید و داخل پروژه های جنگو و ... ازش استفاده میکنید دقیقا همچین کاری میکنه. زمانی که شما یک پروژه جنگو رو با استفاده از گونیکورن اجرا میکنید به استفاده از کانفیگهای شما و کانفیگهای پیشفرض و دیفالتش چندتا به اصطلاح خودش worker اجرا میکنه. این ورکرها داخل تردهای مختلف هستند اما همشون به یک پورت گوش میدن و اگر شما گونیکورن رو متوقف کنید اونها هم متوقف میشن و به شکل کلی گونیکورن master اون ورکرها محصوب میشه.
حالا اینارو گفتم که بگم شما میتونید داخل کد همچین کاری رو با فانکشنهاتون و ... انجام بدید!
به این شکل چندین wsgi سرور توسط خود یکی از ماژولهای gevent به اسم pywsgi که از خود gevent ایمپورت میشه انجام بدید و درنهایت تسکهای ساخته شده رو با استفاده از کتابخونه multiprocessing یک پروسس کنید و به هم جوین کنید.
اما شما نه تنها میتونید این کار کنید بلکه میتونید فانکشنا معمولی رو هم به این سبک ران کنید. اما به این کار دیگه true parallelism نمیگن و بهش میگن concurrent I/O و برای مثال اگر بخواییم ۵ تا ریکوئست همزمان با استفاده از requests بزنیم میتونید همچین کاری کنیم:
jobs = [gevent.spawn(fetch, url) for url in urls]
gevent.joinall(jobs)
فزض کنید فانکشنی به اسم fetch داریم که ورودی یک url میگیره و با requests درخواست http میده و urls هم لیست تمام urlهایی که میخواییم درخواست بزنیم.
آره خلاصه ابزار خوبیه gevent :)
@TorhamDevCH2 869
تاحالا شده دلتون بخواد built-in های پایتون تبدیل به async بشن؟
اگه آره ابزار gevent این کار میکنه!.
با استفاده از geven و ایموپرت کردن و صدا زدن مانکیپچ میتونید اینکار انجام بدید.
import gevent
gevent.monky_patch()
با این کار اونها تبدیل میشن به async. اما باید توجه کنید کنه مانکیپچ ابزارهایی 3rd پارتی و کتابخونههاتون رو نمیتونه async کنه. برای مثال روی requests بخوایید همچین کاری کنید این اتفاق نخواهد افتاد. ابزارها باید مانکیپچینگ رو ساپورت کنن تا این اتفاق بیوفته. اما اگه بخوایید requests رو async ران کنید چی؟
اسم gevent از greenlet میاد. یک ابزار pesudo-thread هستش. یعنی چی؟
ما ۲ مدل مولتی تردینگ داریم، یک مدلش که یک مدلهست که خود os هندل میکنه. داخل اون کانتکس سوییچ توسط os انجام میشه و بسیار سختگیر هستش!
برای مثال هر ترد ۵ ثانیه زمان اجرا داره و برای os مهم نیست که اون ترد کجای کار هستش. اون رو متوقف میکنه و بقیه رو اجرا میکنه.
کانتکس سوییچ چیه؟ همین که گفتم :). همین جابجا شدن رو میگن کانتکس سوییچ.
یک مدل ترد داریم که بهشون cooperative threading میگن. ابزارهایی مثل greenlet از این سبک استفاده میکنن. این ابزار یک ایونت لوپ برای خودش داره که از ایونت لوپ asyncio و بقیه چیزا جدا هستش. و وقتی چندتا ترد رو spawn میکنه این تردها باهم همکاری میکنن ولی یعنی چی؟
یعنی اگر ترد اول یک ریکوئست http زده و نیاز داره صبر کنه خودش میگه من رو متوقف کن تا دیتایی که لازم دارم بیاد و بقیه رو ران کن.
حالا تمام اینا گفتم که بگم شما میتونید با استفاده از ساختن gevent و درنهایت spawn کردن یا همون ران کردنش اونا اجرا کنید.
با این ابزار میشه parallel هم چیز میزا رو ران کرد. که بعدا اگه خوشتون اومد مینویسم.
در نهایت باید توجه داشته باشید که این ابزار برای اینکه GIL اذیتش نکنه صرفا رو یک ترد اجرا میشه و ایونت لوم خودش داره.
نکته بعدی که هست این ابزار برای تسکهای I/O bound خوبه و اگ میخوایید cpu bound کار کنید احتمالا همون ترد عادی بهتر خواهد بود
آره خلاصه :)
@TorhamDevCH
¡Ya disponible! Investigación de Telegram 2025 — los principales insights del año 
