Python Hints
Python tips and tricks The Good, Bad and the Ugly توی این کانال فقط قرار هست در مورد core python صحبت کنیم. این کانال یک بلاگ شخصی هست و پیرامون نظرات و چیزهایی که توی بیش از ۱۰ سال کد زدن یاد گرفتم (فقط برای کمک به دوستان تازهکار) Admin: @Abbasi_ai
显示更多📈 Telegram 频道 Python Hints 的分析概览
频道 Python Hints (@pyhints) 波斯语 语言赛道中的 是活跃参与者。目前社区聚集了 10 095 名订阅者,在 技术与应用 类别中位列第 11 614,并在 伊朗 地区排名第 30 613 位。
📊 受众指标与增长动态
自 невідомо 创建以来,项目保持高速增长,吸引了 10 095 名订阅者。
根据 22 九月, 2026 的最新数据,频道保持稳定运转。过去 30 天订阅人数变化为 144,过去 24 小时变化为 1,整体触达仍然可观。
- 认证状态: 未认证
- 互动率 (ER): 平均受众互动率为 27.47%。内容发布后 24 小时内通常能获得 14.42% 的反应,占订阅者总量。
- 帖子覆盖: 每篇帖子平均可获得 2 773 次浏览,首日通常累积 1 456 次浏览。
- 互动与反馈: 受众积极参与,单帖平均反应数为 81。
- 主题关注点: 内容集中在 ᴘʀᴏxʏ, کانفیگ, مورد, shift, ابزار 等核心主题上。
📝 描述与内容策略
作者将该频道定位为表达主观观点的平台:
“Python tips and tricks
The Good, Bad and the Ugly
توی این کانال فقط قرار هست در مورد core python صحبت کنیم.
این کانال یک بلاگ شخصی هست و پیرامون نظرات و چیزهایی که توی بیش از ۱۰ سال کد زدن یاد گرفتم (فقط برای کمک به دوستان تازهکار)
Admin: @Abbasi...”
凭借高频更新(最新数据采集于 23 九月, 2026),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 技术与应用 类别中的关键影响点。
At its peak, Python helped us serve more than 20 million requests every second.تیم مهندسی
openai یک مقاله داده در مورد یک لایبراری برای دسترسی سادهتر به دیتابیس که با پایتون روز اول نوشته شده بوده و بعد به سرویس پایتون تبدیل شده و نشون داده با طراحی درست سیستم تا ۲۰ میلیون درخواست رو داشتند باهاش هندل میکردند.
البته توی این مقاله راجب تصمیم برای سوییچ کردن به Rust صحبت شده ولی کل مقاله رو اگر بخونید از ابتدا درمورد مزایای استفاده از پایتون برای اینکار هست؛ پیشنهاد میکننم حتما این مقاله رو بخونید (پارت دوم هم داره که scale اش رو میگه)
علاوه بر اون برای دوستان علاقمند پیشنهاد میکنم حتما مقاله مربوط به Postgres رو هم بخونید بخصوص اگر توی تیمی هستید که از روز اول Shard کردن رو دوس داره.
How we adapted our application storage platform, Habitat, in Python to manage unprecedented growth. (Part 1)
Scaling PostgreSQL to power 800 million ChatGPT users.env و پایتون انجام میده
امروز نیاز و نگاهم عوض شده
اگر جونیور هستید و توی تیم میخواید ابزار جدیدی رو پیشنهاد بدید یادتون باشه باید نشون بدید :
۱- این ابزار جایگزین روش قبلی هست
۲- جایگزین کردن ابزار قدیم چقدر هزینه داره (یادگیری نیروهای دیگه هم در نظر بگیرید)
۳- مزیتهاش چیه
که بازم بر میگرده به یکی از مهمترین چیزایی که قبلا گفتم حتما یاد بگیرید یعنی نوشتن ADR اونم صادقانه هم مزایا و هم معایبdev برای ابزارها و کانفیگشون با اسکریپت و ... رو شاید ۱-۲ ماه بعد از یادگیری داکر (اوایل معروف شدن) شروع کردم همین امروز هم اگر تنبلی باعثش نبود عمرا همچین چیزی رو سرچ نمیکردم.
حتی اگر احمق بودن بیش از حد LLM ها نبود هم اینکار رو نمیکردم؛فیچرهایی که خواستم تست کنم جدید بود و البته چون نمیدونستم رفتار درست ابزارها روی فیچرهای جدید چی هست و چطوری عمل میکنه اعتمادی به LLM برای نوشتن این اسکریپت نداشتم دلیلش هم واضح هست :
از کجا بفهمم خطا توی کدم هست؛ یا توی اسکریپت LLM یا حتی اون فیچر رو اشتباه درک کردم یا اشتباه استفاده کردم و ...
این باعث شد سرچ کنم و testcontainers رو پیدا کنم؛ من همیشه محیط تست و توسعهام یکی هست همه چیزش.
روی پروداکشن هم سرور dev, stage و prod همیشه یکسان کانفیگ میشه حتی تا سطح دسترسی و جزئیاتی مثل firewall , ...
فقط تفاوت این میشه که مثلا prod با ۱۰ تا سرور میاد بالا dev با ۱ سرور و stage با ۳ تا سرور اگر جنبه distribute بودن چیزی باشه که برامون مهم هست تست شدنش.
خلاصه اینا معمولا دانشی هست که یک جونیور خوب به تیم اضافه میکنه؛ توی جلسات هفتگی یا حتی ماهانه راهکارهای جدید و به روز شده رو جونیورها معمولا به تیم اضافه میکردند وگرنه من و مثل من که ۱۰ سال هست یک راهکار رو دنبال میکنیم و همیشه جواب داده چرا باید دنبال راه دیگهای بگردیم ؟
جونیورهای تیم رو نگه دارید؛ چونیور درست و خوب تیم رو آپدیت نگه میداره.cheat sheet که توی چند مورد که من خوندم خیلی خوب و درست نوشته شده.
خلاصه این رو روزی ۱ بار بهش سر بزنید.troubleshoot کردنم برای یک شرکت رو مینوشتم و اینکه ۷ نفر قبل من رفته بودند و راهکاری پیدا نشده بود.
حتی بهشون جابجایی استک پایتون رو هم پیشنهاد داده بودند.
و حتی اینکه خرید سرور تا ۳ برابر قویتر هم کمکی نکرده بود.
که سیستمم خاموش شد (نوسان برق)
خلاصهاش رو بگم،
تیبل refresh token رو براش بکگراند جاب بنویسید تمیز کنه.
که اگر یکی refresh token رو اشتباهی گذاشت روی 1 ساعت و ۵ میلیون یوزر داشتید
توی چندین ساعت تیبل بزرگ نشه، شما اون باگ رو توی ۳ ساعت بعدش حل میکنید
ولی ماها بعد حجم اون تیبل چندین برابر میشه و سرچ کردن توش تمام کوئریها رو کند میکنه و میشه چیزی که نباید بشه و خفت میشید.
تقریباً داشتم از پیدا کردن راهکار ناامید میشدم که مشکل رو پیدا کردم.
پینوشت:
۱- دسترسی گرفتن به سرور پروداکشن سخت بود، شاید تنبلی شایدم هرچیز دیگری نفرات قبلی اینکار رو نکرده بودند.
۲- من بعد از اطمینان از کد و البته تست لود و پروفایل روی سرور dev مطمئن شدم باید روی پروداکشن دنبالش بگردم
۳- حتی فکرشم نمیکردم مشکل از refresh باشه چون کد تغییری نکرده بود (۱ سال این بخش کدها دست نخورده بود، گیتلاگ) و البته آخرین تغییر فایل .env روی سرور هم برای ۷ ماه قبل بود ولی مشکل ۲ ماه پیش شروع شده بود.
۴- اگر سوال پیش اومد چرا refresh رو توی دیتابیس داریم در مورد jti, family id توی jwt بخونید.sqlalchemy برای relationship هست که شخصا خیلی دوسش دارم؛ باعث میشه به کوئری که سمت دیتابیس میفرستم فکر کنم بجای اینکه سادهترین راه رو انتخاب کنم.
هرجا هم که نیاز دارم دولوپرها به کوئریهاشون دقت کنند حتما ازش استفاده میکنند.
lazy = "raise"
الان داشتم خروجی پروفایلینگ یک پروژه رو نگاه میکردم؛ توی RandRng گفتم راجبش.
دیدم خیلی کوئریهای دیتابیس زمان بر هست؛ ی سرچ توی مدلهای دیتابیس زدم و همهی relationship هارو بهش؛
lazy = "raise"
اضافه کردم؛ تا دلتون بخواد ارور میگیریم حالا ولی باعث میشه همه به کوئریهاشون فکر کنند.
گفتم اینجا هم بذارم شاید بدرد کسی خورد.Postgres به Sqlite منتقل کنه؛
Sqlite + Litestream
توی خیلی پروژهها برای خودم پیش اومده که یک دیتابیس نیاز داشتم؛ شاید ۵-۱۰ تا جدول ولی اینکه فقط روی یک سرور نباشه هم برام مهم بوده که خب سرویسهای کلاد رو استفاده میکردم.
همزمان هم Latency میرفت بالا هم کلی هزینه پرفورمنس واسه سربارهایی کار کردن با Postgres میدادم درحالی که به ۹۰٪ اون ویژگیها نیازی نداشتم.
الان داشتم دنبال یک راهکار برای یک پروژه دیگه میگشتم و واقعا دلم نمیخواد Latency و Throughput ام بخاطر استفاده از Postgres کم بشه و بعد بشینم اپتیمایز کنم. بخصوص اینکه این دیتابیس هیچ دیتای حساسی نداره و فقط همین که دیتاها از بین نره برام مهم هست.
به چندتا راهکار رسیدم که بنظرم این ترکیب برای کار من برنده هست بخصوص اینکه RustFS رو همین الان داریم :
Turso + Litestream + Rustfs
بعد از پروژه یادم باشه نتایجش رو هم میذارم.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",
}
)
من همیشه اینکار رو برای خودم میکنم که توی همه پروژههام یک استاندارد رعایت شده باشه و راحت بتونم دیباگ کنم و بخونم؛ خلاصه برای راحتی خودم هست.
این حرفا رو که امشب شنیدم گفتم بذارم شما هم توی پروژههاتون رعایت کنید.
امیدوارم مفید باشهfrom pydantic import SecretStr
لطفا ازین مورد استفاده کنید؛ نشستم لاگ سرور یک پروژه رو میخونم تمام اطلاعات سرور و اطلاعات کاربراش خیلی زیبا و خوانا توی لاگ هست.
قبلا هم یک موردی رو توی
@pyhints
یاد دادم برای لاگ نویسی موارد مهم.
لطفا از هر دو استفاده کنید؛ هیچ چیز مهمی نباید توی لاگ نوشته بشه.
بخصوص ایمیل و شمارهتماس کاربر.LLM
قراره جای برنامه نویسهارو بگیره ؟
من که کدم رو + دستورالعمل ریفکتور دادم تا برام تمیز کنه و خروجی که توی تصویر هست
نصف باگهای مدلهای LLM رو من درآوردم باید بهم هزینه پرداخت کنند واقعا
پینوشت:
تازه ۳۵ دقیقه هم طول کشید. خودم میزدم ۲۰ دقیقهای تموم میشد.Stackoverflow هم مورد به اندازه ملموسی هست برای درک این موضوع.
خلاصه مشکل سواد و معماری هست؛ نه فریمورک و زبان برنامهنویسیStackoverflow هستم (بر اساس مصاحبه Roberta Arcoverde میگم)
برای تعجب بیشتر شما؛ توی مصاحبه به monolithic بودن معماری سیستم اشاره میشه و البته به اینکه on-permise هم هست.
اگر کار نیاز به صفحه ادمین و استانداردهای خارج از مایکروسرویس داشته باشه و تیم کوچیک باشه ۱۰۰٪ میرم سراغ جنگو.
عکس دوم هم از اینجا اومده و برای websocket هست
۱۰ هزار کانکشن با حجم دیتای ۱ کیلوبایت تعداد درخواست حداقل ۲۰ هزارتا (تازه روی fastapi که میگن برای وبساکت با حجم بایت بالا خوب نیست)
چیزایی که زیاد میبینم :
آدما هیچ درکی از معماری مونولوتیک و میکروسرویس ندارند و یکی رو میزنند؛ اینم بگم رندر صفحات استک اورفلو توی ۱۲ میلی ثانیه هست.
برید مصاحبه رو ببینید واقعا
آدما هیچ درکی از تعداد درخواست در ثانیه ندارند و زرتی عدد ۱ میلیون درخواست در ثانیه رو تو مصاحبه و ... اینور و اونور پرت میکنند
آدما هیچ درکی از هیچکدوم ندارند و حتی توانایی فهمیدن کد رو هم ندارند و فقط فریمورک پروژه رو میخوان عوض کنند 🤬🤬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 هست.