Telegram Group Search
چرا Multi-Threading در پایتون مثل جاوا کار نمی‌کنه؟

از لینکدین Majid BagherZadeh
کامنت های پستش رو بخونید. لینک این پست

یکی از تفاوت‌های جالب بین زبان‌های برنامه‌نویسی اینه که "Thread" در هر زبان لزوماً به معنای واقعی خودش اجرا نمی‌شه!

🔹 در جاوا، Threadها واقعاً می‌تونن روی چندین هسته CPU اجرا بشن، مخصوصاً حالا که با Virtual Threads در جاوا ۲۱، اجرای هم‌زمان بسیار سبک‌تر و مقیاس‌پذیرتر شده.

🔹 اما در پایتون، یک چیزی به نام GIL (Global Interpreter Lock) وجود داره که باعث می‌شه در هر لحظه فقط یک Thread بتونه اجرا بشه، حتی اگه چند Thread ساخته باشیم! به همین خاطر، در پایتون برای استفاده از تمام هسته‌های CPU معمولاً به جای Multi-Threading از Multi-Processing استفاده می‌کنن.

💡 نتیجه؟
اگر توی جاوا Thread بسازید، واقعاً روی چند هسته اجرا می‌شه. اما توی پایتون، ساختن چندین Thread لزوماً به معنی اجرای هم‌زمان واقعی نیست! به جای اون، در پایتون پردازش‌های موازی بیشتر با Multi-Processing انجام می‌شن تا بتونن از همه‌ی قدرت CPU استفاده کنن.

🔥 این یکی از اون تفاوت‌هایی‌ـه که اگر بهش دقت نکنید، ممکنه فکر کنید Multi-Threading همیشه همون معنی رو داره—ولی در عمل، بستگی داره که توی چه زبانی کار می‌کنید!

🚀 شما چقدر به این تفاوت‌ها توجه کردید؟ تجربه‌ای در این زمینه داشتید؟
Shahab.pdf
527.1 KB
محدود کردن قبلِ از کار افتادن سیستم
از لینکدین Shahab Bozorgi

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

تو جنگو میتونیم با استفاده از DRF خیلی راحت Throttling رو پیاده‌سازی کنیم
این قابلیت بهمون کمک می‌کنه تعداد درخواست‌ هایی که هر کاربر یا کل سیستم میتونه در یک بازه زمانی مشخص بفرسته رو کنترل کنیم

چجوری از Throttling تو DRF استفاده کنیم؟!
ا DRF چند نوع Throttle پیش‌فرض داره:
AnonRateThrottle → برای کاربران ناشناس
UserRateThrottle → برای کاربران لاگین کرده
ScopedRateThrottle → برای محدود کردن درخواست‌ها در سطح API خاص
کافیه این تنظیمات رو توی settings.py اضافه کنیم و مقدار دلخواهمون رو تنظیم کنیم
با این روش از overload شدن سرور هم جلوگیری می‌کنیم.
seo_jozzz.pdf
41 MB
این جزوه رو Hojjat Mesgari توی لینکدینش گذاشته بود.
جزوه دوره سئو خودشه ظاهرا
فکر می کردم جزوه فقط مال دانشگاس
ولی عجب حوصله ای داشته طرف
لینک پست
از بعد از دیدن این
https://github.com/odoo/odoo

دیگه به پایتون احترام میزارم.
لکن، ریپو قابل احترام میشناسی کامنت کن لطفا
Django Chat

A biweekly podcast on the Django Web Framework by Will Vincent and Carlton Gibson

پادکست هاش درباره جنگو هستن


https://djangochat.com/?trk=feed-detail_main-feed-card-text
من میلاد حاتمی، برنامه نویس از سال 2008، قصد دارم به علاقمندان یادگیری طراحی سایت، به صورت خصوصی جنگو آموزش دهم.
🎯در صورتی که من مربی خصوصی جنگو شما بصورت آنلاین باشم:
⚡️یک اینترنت پر سرعت نیاز دارید.
قبل از شروع اولین جلسه به صورت رایگان:
⚡️با سوالاتی ساده، سطح مهارت شما در جنگو را ارزیابی می کنم.
⚡️به سوالات شما در مورد سرفصل ها پاسخ می دهم.
⚡️در صورت تمایل شما، با هم یک پروژه برای آموزش مشخص می کنیم.
⚡️در مورد هزینه، تعداد جلسات، ساعت آموزش و… صحبت می کنیم.
در طول جلسه :
⚡️نکات کاربردی را به شما یاد می دهم.
⚡️آموزش یکطرفه نخواهد بود و شما هم کد می نویسید و با چالش هایی مواجه خواهید شد.
⚡️با برخی ابزارهای کنترل سورس نظیر github آشنا خواهید شد.
⚡️با روش صحیح جستجوی سوالات برنامه نویسی در سایت های معتبر آشنا می شوید.
⚡️شما مجازید یک میلیون سوال بپرسید 🙂
بعد از هر جلسه:
⚡️با هم آموزش را مرور می کنیم.
⚡️در صورت لزوم به شما تمرین می دهم.
⚡️نظر شما را جهت بهتر شدن جلسه بعدی می پرسم.
⚡️در مورد جلسه بعدی برنامه ریزی می کنیم.
جهت ارتباط با من با @miladhzz در ارتباط باشید
روز معلم مبارک.

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

۱۲ اردیبهشت در ایران ‎روز معلم است. این روز اولین بار به دلیل کشته شدن ‎ابوالحسن خانعلی در تجمع۱۲ اردیبهشت۱۳۴۰ معلمان که به استعفای شریف امامی نخست وزیر وقت منجر شد و بار دوم پس از ترور و شهادت مرتضی مطهری، روز معلم نام گرفت.
مطلبی در مورد لاگ از کانال @pyHints
کانفیگ logging برای من همیشه اذیت کننده هست.
بخش عمده‌ای از تسک‌های من مربوط میشه به
Deep learning, ML engineering

اما وجه دیگه کارم backend هست و software engineer برای همین خیلی کم پیش میاد نیاز داشته باشم ی لاگر با جزئیات بنویسم

از طرفی هم ۹۰٪ کدهایی که از بچه‌های بکند تحویل میگیرم ی logging نوشته شده که حافظه زیادی قرار هست بگیره (بخصوص روی سرور تست دارم صحبت میکنم که حجم لاگ بالا میره)

این کد رو قبلا برای Django نوشتم ؛ توضیح دادم تقریبا چند هفته بعد از شروع یادگیری یکی از بدترین پروژه‌های شرکت رو دست گذاشتم روش و شروع کردم به بازنویسی این لاگر رو برای اون نوشتم

هر لاگ فایل تا ۱۰ مگ حجم می‌تونه اشغال کنه و بعد از اون فایل ذخیره میشه به اسم backup تا ۱۰ تا ورژن ازین بکاپ‌ها نگه میدارم فقط و روی نسخه ۱۱
log rotate
میخوره و قدیمی‌ترین فایل حذف میشه

البته این خیلی ساده‌اس ولی خب از اون کیلویی اضافه کردن logging فایل قطعا بهتره

پیشنهاد میدم شما هم ازین کد بعنوان base استفاده کنید و لاگ فایل‌های تمیز داشته باشید چون دیر یا زود خودتون مجبور به خوندنشون هستید.
جنگولرن
مطلبی در مورد لاگ از کانال @pyHints کانفیگ logging برای من همیشه اذیت کننده هست. بخش عمده‌ای از تسک‌های من مربوط میشه به Deep learning, ML engineering اما وجه دیگه کارم backend هست و software engineer برای همین خیلی کم پیش میاد نیاز داشته باشم ی لاگر با…
logger.py
657 B
ادامه مطلب لاگ از کانال @pyHints با یکم جابجایی

اینم فایل سورس (حتما بخونید و درک کنید اول)

کد بالا ربطی به django نداره، هرچند توی یک خط من برای مسیر فایل از django استفاده کردم. Logging مربوط به core python هست.
سخن بزرگان:
آیا کرم دارند؟

سوال بزرگان هم میتونه باشه.
چند ویدئو از علی بیگدلی در مورد Logging
با نثری روان 😁
به ترتیبی که گذاشتم ببینیدشون

اول- آشنایی با ماژول Logging:
https://www.aparat.com/v/j112si1
دوم- basicConfig در logging:
https://www.aparat.com/v/b370k16
سوم- ردگیری عملکرد در exception
https://www.aparat.com/v/f996xa2
چهارم- کلاس ها و توابع log
https://www.aparat.com/v/xpIK6
پنجم- استفاده از handlers
https://www.aparat.com/v/o5VwO


اینم لینک جلسه 17 سیدمحمد خشنوا:
https://www.tg-me.com/جنگولرن/com.djangolearn_ir/796
که در مورد اینا توش گفته:
-اهمیت لاگ‌ها
-مفاهیم پایه‌ای لاگینگ در پایتون
-لاگ‌های رنگی
-ذخیره لاگ‌ها در فایل
-سفارشی‌سازی لاگ‌ها
-اجرای برنامه با سطوح مختلف لاگ
-افزونه‌ها و کتابخانه‌های مختلف برای لاگینگ در پایتون
-معرفی و تمجید از سنتری

شورش رو در آوردم. میدونم🥸
فقط ۴ میلیون 😳
منظورش ۴ میلیون ریال نباشه 😱
فیکسچر (fixure) در جنگو

از لینکدین Amir Hossein Khazaei

فیکسچر چیه؟
فیکسچر یه جور داده‌ی از پیش تعریف شده‌س که قبل از اجرای تست‌هامون به دیتابیس اضافه میشه. این داده‌ها میتونن هر چیزی باشن؛ از یه کاربر ساده گرفته تا یه محصول پیچیده توی فروشگاه آنلاینمون.

چرا بهش نیاز داریم؟

1️⃣ تست‌های دقیق‌تر: با داشتن داده‌های مشخص، می‌تونیم تست‌های دقیق‌تری بنویسیم و مطمئن بشیم که همه چیز طبق انتظار کار می‌کنه.

2️⃣ تست‌های سریع‌تر: به جای اینکه هر بار قبل از اجرای تست‌ها، داده‌های مورد نیازمون رو به صورت دستی وارد دیتابیس کنیم، با استفاده از فیکسچر این کار رو یک بار انجام میدیم و در تست‌های بعدی از همون داده‌ها استفاده می‌کنیم.

3️⃣ تکرارپذیری تست‌ها: با استفاده از فیکسچر، می‌تونیم مطمئن باشیم که هر بار که تست‌هامون رو اجرا می‌کنیم، نتیجه یکسانی خواهیم داشت.

ساختن یه فیکسچر
برای ساختن یه فیکسچر، یه فایل با پسوند json یا yaml ایجاد می‌کنیم و داده‌های مورد نظرمون رو به صورت ساخت‌یافته در اون تعریف می‌کنیم.

دستورات لازم و ساخت و لود کردن فیکسچر
1️⃣ ساختن یه فیکسچر با دستور dumpdata
دستور dumpdata بهت اجازه میده که داده‌های موجود در دیتابیس رو به صورت یک فایل JSON یا YAML خروجی بگیری. این فایل خروجی رو میتونی به عنوان فیکسچر استفاده کنی.
2️⃣ استفاده از فیکسچر با دستور loaddata
دستور loaddata بهت اجازه میده که داده‌های موجود در یک فایل فیکسچر رو به دیتابیس اضافه کنی.

مثال عملی / من کجا باهاش مواجه شدم؟
اضافه کردن شهر ها و استان های ایران به دیتابیس ، که بدیهیه که نمیخوام یکی یکی شهر هارو اضافه کنم😃 توی شرکت پلتفرم حقوقی ترازو که کار میکنم ، قراره لیست شهر هارو به کاربر نمایش بدیم
پس باید از یک جایی دیتای شهرهارو بگیرم و به دیتایس اضافه کنم.

⭕️ نکات کلیدی فیکسچر به زبان ساده
ساختار فیکسچر: فیکسچرت باید شبیه به همون چیزی باشه که توی دیتابیس داری. مثلاً اگه یه مدل محصول داری، فیکسچرت هم باید یه محصول رو تعریف کنه.
اسم‌گذاری فیکسچر: به فیکسچرت یه اسم بامعنا بده تا بفهمی توش چه داده‌هایی داری. مثلاً city.json یعنی توش اطلاعات شهرها هست.
مدیریت فیکسچر: وقتی تست‌های زیادی می‌نویسی، باید یه جوری فیکسچرهات رو مرتب کنی تا گم نشی. می‌تونی از فولدرهای مختلف یا ابزارهای مخصوص استفاده کنی.


جمع‌بندی
فیکسچر یه ابزار خیلی خفنه که بهت کمک می‌کنه تست‌های بهتری بنویسی. با فیکسچر، می‌تونی داده‌های از پیش تعریف شده‌ای رو به دیتابیس اضافه کنی و تست کنی که همه چیز درست کار می‌کنه. انگار داری یه محیط آزمایشی برای برنامه‌ت می‌سازی.
عبارات شرطی در جنگو (Conditional Expressions) ⚖️
از لینکدین علی سیرجانی
با یکم کم کردن متن، که اینجا جا بشه 😬

فرض کن یه مدل به اسم Product داری که می خوای براساس قیمت هر محصول، یه لیبل توی کوئری ست برگردونی:
- اگه قیمت کمتر از ۱۰ باشه → لیبل cheap
- اگه بین ۱۰ تا ۵۰ باشه → لیبل moderate
- اگه ۵۰ یا بیشتر باشه → لیبل expensive
- و اگه هیچ کدوم از شرایط بالا نباشه → لیبل پیش فرض unknown

با استفاده از ابزارهای شرطی مثل Case و When توی Django ORM، این کار خیلی تمیز و بهینه انجام می شه. (نمونه کد داخل تصویر)

🔍 چی داریم اینجا؟
- از Case برای ساختن یک عبارت شرطی کلی استفاده کردیم.
- When شرط های مختلف رو بررسی می کنه.
- then مشخص می کنه اگر اون شرط برقرار بود، چه مقداری برگشت داده بشه.
- و برای مقداردهی به then یا default از ()Value استفاده کردیم.

💡 Value چیه؟
وقتی می خواید یک مقدار ثابت (مثل عدد، رشته، لیست و...) رو مستقیماً داخل کوئری دیتابیس استفاده کنید، از ()Value استفاده می کنید. این کار باعث میشه جنگو بفهمه که اون مقدار، یه فیلد از دیتابیس نیست، بلکه یه مقدار ثابته که باید وارد کوئری بشه.
Forwarded from Python BackendHub
داشتم ویدیو مصاحبه عثمان رو میدیدم با امیربهادر که شاخکام تکون خورد بیشتر راجب yield تحقیق کنم.

سوال) کاربرد yield چیه تو پایتون؟
جواب: یک جنریتور فانکشن که memory efficient هست و مثلا از دیسک میخواین ۱۰۰ گیگ فایل بخونید نیاز نیست کلشو یک دفعه لود کنید تو مموری و میتونید ۱۰۰ مگ ۱۰۰ مگ لود کنید تو مموری

مقاله اول) yield چطور تو سطح پایتون کار میکنه؟ (نسبتا ساده, اسکیپ کنید اگه بلدین)
همونطور که گفتم yield یک جنریتور فانکشن هست. ولی یعنی چی؟
یعنی وقتی کلمه yield رو میذارین و اون تابع رو ران میکنید به جای اینکه یک آبجکت بهتون ریترن کنه بهتون یک جنریتور ریترن میکنه.

هردفعه که next() رو بزنید یک بار اجرا میشه و تا yield بعدی میره.اگه yield دیگه ای نباشه دیگه چیزی ران نمیکنه و ارور StopIteration میده.
یک نکته کلیدی. پس وقتی میخوایم کلین آپ کنیم همینطوری next(my_generator) رو صدا میزنیم تا به اخرین خط کد برسه و ارور بده. درواقع تو asyncio pytest همین اتفاق میفته. ما یک آبجکت رو yield میکنیم. خود asyncio-pytest پلاگین میاد next() میزنه روش و آبجکتو میگیره. بعد به کل تستا پاس میده همون آبجکتو. بعدش هم یک دور دیگه next() رو میزنه و میدونه ما بعد yield اول کلین آپ کردیم. اون موقع کلین آپ تست ما هم ران میشه که خیلی قشنگ تر unittest پایتون هست.



def my_gen():
yield 1
print("Clean up here")

generator = my_gen()
next(generator) -> 1
next(generator) -> prints clean up here -> raise StopIteration


خب تا اینجا فهمیدیم تو سطح پایتون چطوری کار میکنه generator و yield.
حالا میریم یک لایه پایین تر تو سطح interpreter 😈

@ManiFoldsPython
Forwarded from Python Hints
#تجربه #جنگو

چیزی که توی کدهای Django توی ایران به معنای واقعی اصلا و هیچوقت ندیدم؛ اما جزو مهمترین موارد هست.

تست نویسی برای سرویس‌های third-party هست که از طریق API استفاده می‌کنیم.

همینجا اضافه کنم؛ همیشه فرض ما این هست که هیچ اتفاقی برای اون سرویس‌ها نمیوفته ولی چندتا سوال؛

۱- سرویس ما چه اتفاقی باید براش بیوفته اگر سرویس دهنده تغییراتی داشته باشه ؟ و درخواست‌های ما 400, 404 , ... برگرده ؟

۲- چه اتفاقی برای سرویس‌های ما خواهد افتاد اگر سرویس دهنده بخاطر محدودیت‌های جدید یا .... بهمون 500, 503, ... برگردونه ؟

اینا چیزهایی هست که ننوشتن تست براش می‌تونه خسارت زیادی به سرویس بزنه مثلاً:

فرض کنید، من یک فروشگاه اینترنتی دارم؛ اگر سرویس درگاه پرداخت به هر دلیلی کار نکنه یعنی فروشگاه من هیچ خروجی نداره دوتا مورد باید هرچه سریعتر انجام بشه :

۱- یک ایمیل critical برای ادمین بره تا بتونه پیگیری کنه موضوع رو از سرویس دهنده

۲- خطای مناسب (اینکه سرویس پرداخت غیرفعال هست) به کاربر نشون داده بشه تا از رفرش و DDOS شدن توسط کاربرهای خودمون جلوگیری بشه

بخصوص روی سرویس‌های auto-scale که با زیاد شدن درخواست سرورهای جدیدی بالا میاد و این یعنی هزینه بیشتر.


توی زبان‌های برنامه‌نویسی مختلف ابزارهای متفاوتی برای اینکار وجود داره؛ توی پایتون هم پکیج
Responses

کمک می‌کنه اینکار رو انجام بدید.

واقعاً نمی‌دونم چرا؛ ولی اینکه این تست‌های توی کدهای شرکت‌های بزرگ داخلی نمی‌بینم یا حتی توی آموزش‌ها و .... مغزم سوت می‌کشه.

بعد اینا از gorilla تست صحبت می‌کنند.


حالا که این موارد رو توی آموزش و کدها ندیدم (توی سرویس‌هایی که تیم‌ خودم می‌نویسه همیشه وجود داره)

گفتم بگم که شما خودتون یاد بگیرید، شاید یک روزی کدهای شما به من رسید یا هم تیمی شدیم.
نظر شما در مورد این متن چیه؟
لایک یا دیسلایک هم کافیه


Free things often fail to leave a lasting impression. Why?

Behavioral economist Dan Ariely points out an intriguing aspect of human behavior: we attach greater value to things when we have invested effort or participated in a social experience - even if money never changed hands.

If your goal is to create lasting connections or memories, simply handing out freebies isn't enough. Instead, find meaningful ways for people to engage - emotionally, socially, or creatively. By creating a moment worth remembering, you increase the perceived value of the experience itself.

What are your thoughts on this approach?
سلام به همه
جلسه 7 جنگو
آشنایی مقدماتی با ORMجنگو + پرسش و پاسخ

امشب 9 خرداد ساعت 21.30 به مدت یک و نیم ساعت
در بستر گوگل میت / غیر رایگان

هماهنگی @miladhzz
2025/05/30 17:00:41
Back to Top
HTML Embed Code: