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
TorhamDev | تورهام 😳
شنبه خبرای خوب میاد 🤝
ها راستی. امروز روز اول کاریم بود. در شرکت گراف
🔥372🍾2
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
2👍94🤔1
تا ابد حق.

@TorhamDevCH
👍7
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 بزنیم میتونید همچین کاری کنیم:

jobs = [gevent.spawn(fetch, url) for url in urls]
gevent.joinall(jobs)

فزض کنید فانکشنی به اسم fetch داریم که ورودی یک url میگیره و با requests درخواست http میده و urls هم لیست تمام urlهایی که میخواییم درخواست بزنیم.

آره خلاصه ابزار خوبیه gevent :)

@TorhamDevCH
👍5🔥31👎1
الان اگه http بهم نشون بدید جیغ میکشم.‌..
🤣14💋2
Please open Telegram to view this post
VIEW IN TELEGRAM
TorhamDev | تورهام 😳
This media is not supported in your browser
VIEW IN TELEGRAM
تلگرام کسب و کار بات‌های هیدن چت و غیره رو کساد کرد 🥰
👍152🔥1
اگه یادگرفتن با انجام دادن رو دوست دارید ( learn by doing ) و احتمالا میخوایید لینوکس رو از پایه یاد بگیرید و حال نگاه کردن ۱۲ ساعت دوره و این چیزا رو ندارید. دلتون میخوایید بخونید و تست کنید میتونی از اینجا شروع کنید

https://linuxjourney.com/

بعد از این که linux journey رو تموم کردید یا همزمان با اون میتونید برید داخل over the write و چالش لینوکسیش رو انجام بدید.
https://overthewire.org/wargames/bandit/

این طوری دیگه لازم نیست دوره ببینید یک عمر صرفا بخونید تا اخرش یک دستور ببینید و بگید واستا این چی بود؟

خلاصه دیگه دستور بزنید و خراب کاری کنید یاد بگیرید.

@TorhamDevCH
25🔥1🤝1
بچه ها فعلا ssh tunnel خوب جواب میده اگه حتی سرور خارجی دارید که فعلا ip بلاک نشده میتونید بهش ssh tunnel بزنید.
👎9👍4
Forwarded from Seyed Mahdi Notes (Seyed Mahdi)
میرور هامون فعلا وصله :)
توی این شرایط شاید به دردتون بخوره

https://mirrors.kubarcloud.com
4👍2
وصلید؟ اگر هستید بگید که بتونیم به بقیه بگیم وصل بشن.
👍292🥰2
چی از این بهتر که صبح رو با یک مقاله درباره مموری منیجمنت شروع کنید؟

Understanding Memory Management, Part 1: C

https://educatedguesswork.org/posts/memory-management-1


@TorhamDevCH
🥱741👍1
صبح‌تون رو با یک مقاله تقریبا کوتاه درباره استفاده‌های نامرسوم پایتون در کتابخانه‌های مرسوم شروع کنید =)

Uncommon Uses of Python in Commonly Used Libraries (2022)


@TorhamDevCH
👌4👍2
چند وقت پیش CTO کلاودفلر اعلام کرد که از این به بعد بلاک هوش مصنوعی به صورت پیشفرض فعال خواهد بود(خبرش). منظورش چیه؟ شرکت‌های هوش مصنوعی مثل openAI یا حتی گوگل از محتوا نوشته شده توسط بقیه در اینترنت به شکل رایگان استفاده میکنن و با کراول کردنشون اون‌ها جمع آوری میکنن. چند وقت پیش کلاودفلر فیچری رو معرفی کرد که این کراولرها رو داخل یک لوپ از دیتاهایی خودشون با هوش مصنوعی تولید شده که وریفای نشده میندازه تا کراولرها به مشکل بخورن و اطلاعات رو مفتی برندارن. حالا گفته به صورت پیش‌فرض فعال این فیچر.

اما مشکل اینجاست که گوگل رو نمیشه به این راحتیا از کراول کردن وبسایت‌ها منع کرد چرا که همزمان بزرگترین موتور جستجو وب هم هستش. حالا Matthew Prince که cto کلاودفلر باشه گفته که میخوان هوش مصنوعی گوگل رو هم در این بلاک قرار بدن و اولین ایده اش همینه به خود گوگل درخواست داده تا خودشون یک راه برای این کار ارائه بدن یا کلاودفلر خودش یک کاری به زور میکنه 😁

https://www.seroundtable.com/cloudflare-block-google-ai-overviews-39718.html


@TorhamDevCH
🤣8🔥42🤔1
امروز هم میتونیم با مقاله ای درباره اینکه AI قرار نیست شغل جونیورها رو نابود کنه بلکه صرفا قراره تغییرش بده شروع کنیم.

https://addyo.substack.com/p/ai-wont-kill-junior-devs-but-your


@TorhamDevCH
62🗿1