TorhamDev | تورهام 😳
ها راستی. امروز روز اول کاریم بود. در شرکت گراف
برای اونایی که پرسیدن، دیگه اومدم تهران ریموت نیست D:
🤩22
تاحالا شده دلتون بخواد 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
اگه آره ابزار 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
2👍9❤4🤔1
TorhamDev | تورهام 😳
تاحالا شده دلتون بخواد built-in های پایتون تبدیل به async بشن؟ اگه آره ابزار gevent این کار میکنه!. با استفاده از geven و ایموپرت کردن و صدا زدن مانکیپچ میتونید اینکار انجام بدید. import gevent gevent.monky_patch() با این کار اونها تبدیل میشن به async.…
parallel with gevent
تو پست قبلی گفتم که gevent چی هست و چطور خوبه ازش استفاده و به چه دردی میخوره. یکی از کارهایی دیگه که باهاش میتونید انجام بدید true parallelism هستش. یعنی چندین تسک رو به صورت همزمان اجرا کنید. برای این کار باید از تکنیکی استفاده کنید به اسم prefork (پریفورک).
اما prefork چی هست؟
پریفورک به شکل ساده میشه زمانی که یک ترد میخاد اجرا بشه و قبل از اجرا شدنش چندین ترد دیگه رو هم اجرا میکنه و این ترد خودش به عنوان ترد master عمل میکنه و بقیه تردها رو کنترل میکنه.
برای مثال ابزار گونیکورن که خیلیهاتو باهاش آشنا هستید و داخل پروژه های جنگو و ... ازش استفاده میکنید دقیقا همچین کاری میکنه. زمانی که شما یک پروژه جنگو رو با استفاده از گونیکورن اجرا میکنید به استفاده از کانفیگهای شما و کانفیگهای پیشفرض و دیفالتش چندتا به اصطلاح خودش worker اجرا میکنه. این ورکرها داخل تردهای مختلف هستند اما همشون به یک پورت گوش میدن و اگر شما گونیکورن رو متوقف کنید اونها هم متوقف میشن و به شکل کلی گونیکورن master اون ورکرها محصوب میشه.
حالا اینارو گفتم که بگم شما میتونید داخل کد همچین کاری رو با فانکشنهاتون و ... انجام بدید!
به این شکل چندین wsgi سرور توسط خود یکی از ماژولهای gevent به اسم pywsgi که از خود gevent ایمپورت میشه انجام بدید و درنهایت تسکهای ساخته شده رو با استفاده از کتابخونه multiprocessing یک پروسس کنید و به هم جوین کنید.
اما شما نه تنها میتونید این کار کنید بلکه میتونید فانکشنا معمولی رو هم به این سبک ران کنید. اما به این کار دیگه true parallelism نمیگن و بهش میگن concurrent I/O و برای مثال اگر بخواییم ۵ تا ریکوئست همزمان با استفاده از requests بزنیم میتونید همچین کاری کنیم:
فزض کنید فانکشنی به اسم fetch داریم که ورودی یک url میگیره و با requests درخواست http میده و urls هم لیست تمام urlهایی که میخواییم درخواست بزنیم.
آره خلاصه ابزار خوبیه gevent :)
@TorhamDevCH
تو پست قبلی گفتم که 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 :)
@TorhamDevCH
👍5🔥3⚡1👎1
TorhamDev | تورهام 😳
This media is not supported in your browser
VIEW IN TELEGRAM
تلگرام کسب و کار باتهای هیدن چت و غیره رو کساد کرد 🥰
👍15❤2🔥1
اگه یادگرفتن با انجام دادن رو دوست دارید ( learn by doing ) و احتمالا میخوایید لینوکس رو از پایه یاد بگیرید و حال نگاه کردن ۱۲ ساعت دوره و این چیزا رو ندارید. دلتون میخوایید بخونید و تست کنید میتونی از اینجا شروع کنید
https://linuxjourney.com/
بعد از این که linux journey رو تموم کردید یا همزمان با اون میتونید برید داخل over the write و چالش لینوکسیش رو انجام بدید.
https://overthewire.org/wargames/bandit/
این طوری دیگه لازم نیست دوره ببینید یک عمر صرفا بخونید تا اخرش یک دستور ببینید و بگید واستا این چی بود؟
خلاصه دیگه دستور بزنید و خراب کاری کنید یاد بگیرید.
@TorhamDevCH
https://linuxjourney.com/
بعد از این که linux journey رو تموم کردید یا همزمان با اون میتونید برید داخل over the write و چالش لینوکسیش رو انجام بدید.
https://overthewire.org/wargames/bandit/
این طوری دیگه لازم نیست دوره ببینید یک عمر صرفا بخونید تا اخرش یک دستور ببینید و بگید واستا این چی بود؟
خلاصه دیگه دستور بزنید و خراب کاری کنید یاد بگیرید.
@TorhamDevCH
❤25🔥1🤝1
بچه ها فعلا ssh tunnel خوب جواب میده اگه حتی سرور خارجی دارید که فعلا ip بلاک نشده میتونید بهش ssh tunnel بزنید.
👎9👍4
چی از این بهتر که صبح رو با یک مقاله درباره مموری منیجمنت شروع کنید؟
Understanding Memory Management, Part 1: C
https://educatedguesswork.org/posts/memory-management-1
@TorhamDevCH
Understanding Memory Management, Part 1: C
https://educatedguesswork.org/posts/memory-management-1
@TorhamDevCH
educatedguesswork.org
Understanding Memory Management, Part 1: C
🥱7⚡4❤1👍1
https://dev.arie.bovenberg.net/blog/python-datetime-pitfalls
صبحتون رو با مقاله ای درباره مشکلات(دام)های کتابخونههای datetime در پایتون شروع کنید :)
@TorhamDevCH
صبحتون رو با مقاله ای درباره مشکلات(دام)های کتابخونههای datetime در پایتون شروع کنید :)
@TorhamDevCH
Arie Bovenberg
Ten Python datetime pitfalls, and what libraries are (not) doing about it
It’s no secret that the Python datetime library has its quirks. Not only are there probably more than you think; third-party libraries don’t address most of them! I created a new library to explore what a better datetime library could look like.
⚡2👍2
صبحتون رو با یک مقاله تقریبا کوتاه درباره استفادههای نامرسوم پایتون در کتابخانههای مرسوم شروع کنید =)
Uncommon Uses of Python in Commonly Used Libraries (2022)
@TorhamDevCH
Uncommon Uses of Python in Commonly Used Libraries (2022)
@TorhamDevCH
eugeneyan.com
Uncommon Uses of Python in Commonly Used Libraries
Some off-the-beaten uses of Python learned from reading libraries.
👌4👍2
چند وقت پیش CTO کلاودفلر اعلام کرد که از این به بعد بلاک هوش مصنوعی به صورت پیشفرض فعال خواهد بود(خبرش). منظورش چیه؟ شرکتهای هوش مصنوعی مثل openAI یا حتی گوگل از محتوا نوشته شده توسط بقیه در اینترنت به شکل رایگان استفاده میکنن و با کراول کردنشون اونها جمع آوری میکنن. چند وقت پیش کلاودفلر فیچری رو معرفی کرد که این کراولرها رو داخل یک لوپ از دیتاهایی خودشون با هوش مصنوعی تولید شده که وریفای نشده میندازه تا کراولرها به مشکل بخورن و اطلاعات رو مفتی برندارن. حالا گفته به صورت پیشفرض فعال این فیچر.
اما مشکل اینجاست که گوگل رو نمیشه به این راحتیا از کراول کردن وبسایتها منع کرد چرا که همزمان بزرگترین موتور جستجو وب هم هستش. حالا Matthew Prince که cto کلاودفلر باشه گفته که میخوان هوش مصنوعی گوگل رو هم در این بلاک قرار بدن و اولین ایده اش همینه به خود گوگل درخواست داده تا خودشون یک راه برای این کار ارائه بدن یا کلاودفلر خودش یک کاری به زور میکنه 😁
https://www.seroundtable.com/cloudflare-block-google-ai-overviews-39718.html
@TorhamDevCH
اما مشکل اینجاست که گوگل رو نمیشه به این راحتیا از کراول کردن وبسایتها منع کرد چرا که همزمان بزرگترین موتور جستجو وب هم هستش. حالا Matthew Prince که cto کلاودفلر باشه گفته که میخوان هوش مصنوعی گوگل رو هم در این بلاک قرار بدن و اولین ایده اش همینه به خود گوگل درخواست داده تا خودشون یک راه برای این کار ارائه بدن یا کلاودفلر خودش یک کاری به زور میکنه 😁
https://www.seroundtable.com/cloudflare-block-google-ai-overviews-39718.html
@TorhamDevCH
Search Engine Roundtable
Cloudflare CEO: We Will Get Google To Provide A Way To Block AI Overviews
A week or so ago, Cloudflare announced it would block AI bots by default and offer a new pay per crawl initiative to compensate you all for your content that AI just consumes for free. But as most SEOs know, Google AI Mode and AI Overviews can't be blocked…
🤣8🔥4❤2🤔1
امروز هم میتونیم با مقاله ای درباره اینکه AI قرار نیست شغل جونیورها رو نابود کنه بلکه صرفا قراره تغییرش بده شروع کنیم.
https://addyo.substack.com/p/ai-wont-kill-junior-devs-but-your
@TorhamDevCH
https://addyo.substack.com/p/ai-wont-kill-junior-devs-but-your
@TorhamDevCH
Substack
AI Won't Kill Junior Devs - But Your Hiring Strategy Might
No juniors today means no seniors tomorrow: rethinking talent development
⚡6❤2🗿1