tgindex

Python Hints

описание

Python tips and tricks The Good, Bad and the Ugly توی این کانال فقط قرار هست در مورد core python صحبت کنیم. این کانال یک بلاگ شخصی هست و پیرامون نظرات و چیزهایی که توی بیش از ۱۰ سال کد زدن یاد گرفتم (فقط برای کمک به دوستان تازه‌کار) Admin: @Abbasi_ai

9 918
подписчиков
Охват к подписчикам
42,4%
ERR
Реакции к просмотрам
0,97%
1 166 на 25 постов
Пересылки к просмотрам
1,42%
1 699
Постов в день
0,0
всего 27

Где отзываются чаще

доля реакций к просмотрам
  • 29 окт. 2024 г.без подписи2,13%
  • 7 июл.class Engine(): _instance = None _lock = threading.Lock() def __new__(cls): if cls._instance is None: with cls._lock: if cls._instance is None: .... توی کد بالا بنظر شما چرا if cls._instance دوبار استفاده شده ؟ اگر بلد نیستید اشکالی نداره (قراره یاد بگیرید) قبل از دیدن راهنمایی‌ها با دقت بهش فکر کنید ببینید متوجه دلیلش می‌شید ؟ راهنمایی: به حالت async اجرای این Singleton فکر کنید اسم این پترن : double check locking هست یک سری موارد رو چندوقت پیش توی مصاحبه‌هام با شرکت‌های بزرگ دیدم؛‌ الان دارم روی یک پروژه کار می‌کنم این مورد رو نیاز داشتم پیاده‌سازی کنم گفتم همینارو سوال جواب کنم برای یادگیری دوستان.1,82%
  • 9 авг.داشتم داستان ۲ هفته troubleshoot کردنم برای یک شرکت رو می‌نوشتم و اینکه ۷ نفر قبل من رفته بودند و راهکاری پیدا نشده بود. حتی بهشون جابجایی استک پایتون رو هم پیشنهاد داده بودند. و حتی اینکه خرید سرور تا ۳ برابر قویتر هم کمکی نکرده بود. که سیستمم خاموش شد (نوسان برق) خلاصه‌اش رو بگم، تیبل refresh token رو براش بکگراند جاب بنویسید تمیز کنه. که اگر یکی refresh token رو اشتباهی گذاشت روی 1 ساعت و ۵ میلیون یوزر داشتید توی چندین ساعت تیبل بزرگ نشه، شما اون باگ رو توی ۳ ساعت بعدش حل می‌کنید ولی ماها بعد حجم اون تیبل چندین برابر میشه و سرچ کردن توش تمام کوئری‌ها رو کند می‌کنه و می‌شه چیزی که نباید بشه و خفت می‌شید. تقریباً داشتم از پیدا کردن راهکار ناامید می‌شدم که مشکل رو پیدا کردم. پینوشت: ۱- دسترسی گرفتن به سرور پروداکشن سخت بود، شاید تنبلی شایدم هرچیز دیگری نفرات قبلی اینکار رو نکرده بودند. ۲- من بعد از اطمینان از کد و البته تست لود و پروفایل روی سرور dev مطمئن شدم باید روی پروداکشن دنبالش بگردم ۳- حتی فکرشم نمی‌کردم مشکل از refresh باشه چون کد تغییری نکرده بود (۱ سال این بخش کدها دست نخورده بود، گیت‌لاگ) و البته آخرین تغییر فایل .env روی سرور هم برای ۷ ماه قبل بود ولی مشکل ۲ ماه پیش شروع شده بود. ۴- اگر سوال پیش اومد چرا refresh رو توی دیتابیس داریم در مورد jti, family id توی jwt بخونید.1,72%
  • 27 июл.اینو یادداشت کرده بودم که بذارم: تقریبا ۱.۵ سال پیش روی یک پروژه‌ای کار می‌کردم (فکر کنم گفتم جزو معدود پروژه‌هایی بود که از اول توی پروژه بودم) امشب با مدیرعامل شرکت و صاحب پروژه صحبت می‌کردم (شاید پروژه دوم) می‌گفت علاوه بر دولوپر‌های بعدی ادمین دیتابیس هر چندوقت یکبار که روی دیتابیس کار می‌کنه ی دمش گرم هم به ما می‌گه. من استاندارد‌های زیادی رو رعایت کردم روی اون پروژه ولی این ۵ خط بنظر میاد خیلی بچه‌هایی که روی دیتابیس کار می‌کنند رو راضی نگه‌داشته class Base(AsyncAttrs, DeclarativeBase): metadata = sa.MetaData( naming_convention={ "ix": "ix_%(column_0_label)s", "uq": "uq_%(table_name)s_%(column_0_name)s", "ck": "ck_%(table_name)s_%(column_0_name)s", "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s", "pk": "pk_%(table_name)s", } ) من همیشه اینکار رو برای خودم می‌کنم که توی همه پروژه‌هام یک استاندارد رعایت شده باشه و راحت بتونم دیباگ کنم و بخونم؛ خلاصه برای راحتی خودم هست. این حرفا رو که امشب شنیدم گفتم بذارم شما هم توی پروژه‌هاتون رعایت کنید. امیدوارم مفید باشه1,71%
  • 16 сент. 2025 г.без подписи1,49%
  • 30 июл. 2025 г.без подписи1,26%
  • 7 июл.یکبار برای همیشه؛ زرتی نرید استک بکند رو عوض کنید تا تعداد درخواست‌هاتون به ۵۰ تا در ثانیه رسید. اگر سرویس بکند شما نمی‌تونه این تعداد درخواست رو جواب بده مشکل شما پایتون نیست؛ مشکل شما سواد هست. واقعا خسته شدم طرف تعداد درخواست در ثانیه‌اش به ۳۰ تا هم نمیرسه میگه ما باید به Go مهاجرت کنیم. حتما روی ۱۰۰ تا هم باید به Rust مهاجرت کنی ؟ من دوتا تصویر میذارم؛ تصویر اول بر اساس این بنچمارک مستقل با chatgpt جدول شده برای هر کدوم تعداد درخواست بر ثانیه رو می‌نویسم: 1) Django + Postgresql: 31,000 - 33,000 2) Fastapi: 11,000 - 109,000 مثلا توی همون بنچمارک کانفیگ‌های مختلف Fastapi رو ببینید چقدر تفاوت داره از ۱۱ هزار درخواست برای یک مورد تا ۱۰۹۰۰۰ درخواست. بدون تغییر فریمورک اصلی و کد 3) Gin: 110,000 و در نهایت فریمورک مورد علاقه خودم : 4) Axum + Postgres: 1,115,000 بله میلیون با اینکه من خیلی به Axum علاقه دارم و بسیار هم توی کد زدن روش راحت هستم ولی تا الان نشده مشاور یا مدیر فنی تیمی باشم و Axum رو پیشنهاد بدم حتی روی بکند‌های با تعداد درخواست بسیار بالا گزینه اول همیشه FastAPI هست. ادامه پست بعدی1,16%
  • 27 июл.#Quick from pydantic import SecretStr لطفا ازین مورد استفاده کنید؛ نشستم لاگ سرور یک پروژه رو میخونم تمام اطلاعات سرور و اطلاعات کاربراش خیلی زیبا و خوانا توی لاگ هست. قبلا هم یک موردی رو توی @pyhints یاد دادم برای لاگ نویسی موارد مهم. لطفا از هر دو استفاده کنید؛ هیچ چیز مهمی نباید توی لاگ نوشته بشه. بخصوص ایمیل و شماره‌تماس کاربر.1,12%
  • 13 июл. 2025 г.без подписи1,05%
  • 22 июн. 2025 г.без подписи0,99%
  • 1 авг.یک آپشن روی sqlalchemy برای relationship هست که شخصا خیلی دوسش دارم؛ باعث میشه به کوئری که سمت دیتابیس میفرستم فکر کنم بجای اینکه ساده‌ترین راه رو انتخاب کنم. هرجا هم که نیاز دارم دولوپر‌ها به کوئری‌هاشون دقت کنند حتما ازش استفاده می‌کنم. lazy = "raise" الان داشتم خروجی پروفایلینگ یک پروژه رو نگاه میکردم؛‌ توی RandRng گفتم راجبش. دیدم خیلی کوئری‌های دیتابیس زمان بر هست؛ ی سرچ توی مدل‌های دیتابیس زدم و همه‌ی relationship هارو بهش؛ lazy = "raise" اضافه کردم؛‌ تا دلتون بخواد ارور میگیریم حالا ولی باعث میشه همه به کوئری‌هاشون فکر کنند. گفتم اینجا هم بذارم شاید بدرد کسی خورد.0,98%
  • 7 июл.یکبار برای همیشه؛ زرتی نرید استک بکند رو عوض کنید تا تعداد درخواست‌هاتون به ۵۰ تا در ثانیه رسید. اگر سرویس بکند شما نمی‌تونه این تعداد درخواست رو جواب بده مشکل شما پایتون نیست؛ مشکل شما سواد هست. واقعا خسته شدم طرف تعداد درخواست در ثانیه‌اش به ۳۰ تا هم نمیرسه…0,96%