Ninja Learn | نینجا لرن
💎 ادامه gunicorn بخش ۲ 💎 حالا که توی پست قبلی با Gunicorn آشنا شدیم، بریم سراغ جزئیات بیشتر و تخصصیترش. تو این بخش میخوایم Gunicorn رو از زیر و رو بررسی کنیم و ببینیم که چه قابلیتهای پنهانی داره. 🅰 مدل کاری Gunicorn: پری فورک (Pre-fork) باید بدونید Gunicorn…
ممنون میشم با ریکشن زدن و شیر کردن پستا حمایت کنید تا پستای بیشتر و با کیفیت تری بزاریم😊❤️
🔥6❤1
سلام رفقا 👋
حال دلتون چطوره
خوش آمد میگم به دوستانی که تازه به جمعمون اضافه شدن ❤️
متاسفانه پیج قبلیمون از دسترس خارج شد و مجبور شدیم پیج جدید بزنیم
برای حمایت از ما، فالو کنید که پرقدرت شروع کنیم 💪
قراره کلی پست و آموزش با کیفیت بذاریم ✌️
https://www.instagram.com/ninjalearn_/
حال دلتون چطوره
خوش آمد میگم به دوستانی که تازه به جمعمون اضافه شدن ❤️
متاسفانه پیج قبلیمون از دسترس خارج شد و مجبور شدیم پیج جدید بزنیم
برای حمایت از ما، فالو کنید که پرقدرت شروع کنیم 💪
قراره کلی پست و آموزش با کیفیت بذاریم ✌️
https://www.instagram.com/ninjalearn_/
❤🔥9❤1
سلام رفقا 👋
بعد یه مدت پست جدید تو اینستا گذاشته شد
لطفا بیاید و حمایت خودتونو نشون بدید 🌹
https://www.instagram.com/reel/C-hdU59MsD5/?igsh=MjNnZWEzM3ZvMjFj
بعد یه مدت پست جدید تو اینستا گذاشته شد
لطفا بیاید و حمایت خودتونو نشون بدید 🌹
https://www.instagram.com/reel/C-hdU59MsD5/?igsh=MjNnZWEzM3ZvMjFj
👍2🥰2❤1
Ninja Learn | نینجا لرن pinned «سلام رفقا 👋 بعد یه مدت پست جدید تو اینستا گذاشته شد لطفا بیاید و حمایت خودتونو نشون بدید 🌹 https://www.instagram.com/reel/C-hdU59MsD5/?igsh=MjNnZWEzM3ZvMjFj»
💎 ادامه gunicorn بخش ۳ 💎
⚔ دیمن و Gunicorn: یک دوئل در پسزمینه سیستم
خیلی خب، بریم سراغ جزئیات جذابتر! وقتی میگیم Gunicorn رو به عنوان دیمن اجرا میکنیم، یعنی چی؟ یعنی این برنامه بعد از اجرا شدن، به صورت مستقل در پسزمینه سیستم کارش رو ادامه میده و دیگه نیازی نیست که ترمینال رو باز نگه داریم.
❓ چرا دیمن شدن مهمه؟
1⃣ پایداری: اگه Gunicorn به عنوان دیمن اجرا بشه، حتی اگه ترمینال رو ببندیم یا سیستم رو ریستارت کنیم، همچنان به کارش ادامه میده.
2⃣ مدیریت آسانتر: با استفاده از ابزارهای مدیریت سیستم عامل، میتونیم Gunicorn رو به عنوان یک سرویس سیستمعامل مدیریت کنیم. یعنی میتونیم اون رو شروع، متوقف، ریستارت و پیکربندی کنیم.
3⃣ امنیت: اجرای Gunicorn به عنوان دیمن باعث میشه که دسترسی به تنظیمات و فایلهای آن محدود بشه.
😁 اما این داستان پیچیدهتر از این حرفهاست.
وقتی Gunicorn به عنوان دیمن اجرا میشه، یک فرآیند والد ایجاد میکنه که وظیفه نظارت بر فرآیندهای فرزند رو بر عهده داره.
اگه یکی از فرآیندهای فرزند با مشکلی مواجه بشه، فرآیند والد اون رو تشخیص میده و یک فرآیند جدید جایگزینش میکنه. این مکانیزم باعث میشه که Gunicorn به شدت پایدار باشه.
👀 حالا بیا یه کم فنیتر به قضیه نگاه کنیم.
وقتی میگیم Gunicorn رو به عنوان دیمن اجرا میکنیم، در واقع داریم از یک سیستم مدیریت فرآیند مثل systemd (در لینوکس) یا launchd (در مک) استفاده میکنیم. این سیستمها به ما اجازه میدن تا فرآیندهای دیمن رو به صورت خودکار هنگام بوت شدن سیستم اجرا کنیم، و همچنین اونها رو مدیریت کنیم.
✅ پس به طور خلاصه:
دیمن شدن Gunicorn باعث میشه که اون به صورت مستقل و پایدار در پسزمینه سیستم اجرا بشه.
فرآیند والد Gunicorn وظیفه نظارت بر فرآیندهای فرزند رو بر عهده داره.
سیستمهای مدیریت فرآیند مثل systemd به ما کمک میکنن تا Gunicorn رو به عنوان یک سرویس سیستمعامل مدیریت کنیم.
🧪 حالا بیا یه مثال عملی بزنیم.
فرض کن میخوای Gunicorn رو به عنوان دیمن در لینوکس اجرا کنی. میتونی از دستور زیر استفاده کنی:
با اجرای این دستور، Gunicorn به عنوان یک سرویس سیستمعامل شروع به کار میکنه و در پسزمینه سیستم اجرا میشه.
پایان
⚔ دیمن و Gunicorn: یک دوئل در پسزمینه سیستم
خیلی خب، بریم سراغ جزئیات جذابتر! وقتی میگیم Gunicorn رو به عنوان دیمن اجرا میکنیم، یعنی چی؟ یعنی این برنامه بعد از اجرا شدن، به صورت مستقل در پسزمینه سیستم کارش رو ادامه میده و دیگه نیازی نیست که ترمینال رو باز نگه داریم.
❓ چرا دیمن شدن مهمه؟
1⃣ پایداری: اگه Gunicorn به عنوان دیمن اجرا بشه، حتی اگه ترمینال رو ببندیم یا سیستم رو ریستارت کنیم، همچنان به کارش ادامه میده.
2⃣ مدیریت آسانتر: با استفاده از ابزارهای مدیریت سیستم عامل، میتونیم Gunicorn رو به عنوان یک سرویس سیستمعامل مدیریت کنیم. یعنی میتونیم اون رو شروع، متوقف، ریستارت و پیکربندی کنیم.
3⃣ امنیت: اجرای Gunicorn به عنوان دیمن باعث میشه که دسترسی به تنظیمات و فایلهای آن محدود بشه.
😁 اما این داستان پیچیدهتر از این حرفهاست.
وقتی Gunicorn به عنوان دیمن اجرا میشه، یک فرآیند والد ایجاد میکنه که وظیفه نظارت بر فرآیندهای فرزند رو بر عهده داره.
اگه یکی از فرآیندهای فرزند با مشکلی مواجه بشه، فرآیند والد اون رو تشخیص میده و یک فرآیند جدید جایگزینش میکنه. این مکانیزم باعث میشه که Gunicorn به شدت پایدار باشه.
👀 حالا بیا یه کم فنیتر به قضیه نگاه کنیم.
وقتی میگیم Gunicorn رو به عنوان دیمن اجرا میکنیم، در واقع داریم از یک سیستم مدیریت فرآیند مثل systemd (در لینوکس) یا launchd (در مک) استفاده میکنیم. این سیستمها به ما اجازه میدن تا فرآیندهای دیمن رو به صورت خودکار هنگام بوت شدن سیستم اجرا کنیم، و همچنین اونها رو مدیریت کنیم.
✅ پس به طور خلاصه:
دیمن شدن Gunicorn باعث میشه که اون به صورت مستقل و پایدار در پسزمینه سیستم اجرا بشه.
فرآیند والد Gunicorn وظیفه نظارت بر فرآیندهای فرزند رو بر عهده داره.
سیستمهای مدیریت فرآیند مثل systemd به ما کمک میکنن تا Gunicorn رو به عنوان یک سرویس سیستمعامل مدیریت کنیم.
🧪 حالا بیا یه مثال عملی بزنیم.
فرض کن میخوای Gunicorn رو به عنوان دیمن در لینوکس اجرا کنی. میتونی از دستور زیر استفاده کنی:
sudo systemctl start gunicorn
با اجرای این دستور، Gunicorn به عنوان یک سرویس سیستمعامل شروع به کار میکنه و در پسزمینه سیستم اجرا میشه.
پایان
#Gunicorn #Python #WebServer #Programming #Developer #Flask #Django #WebDevelopment
👍6❤5🐳1
Ninja Learn | نینجا لرن
سلام رفقا 👋 بعد یه مدت پست جدید تو اینستا گذاشته شد لطفا بیاید و حمایت خودتونو نشون بدید 🌹 https://www.instagram.com/reel/C-hdU59MsD5/?igsh=MjNnZWEzM3ZvMjFj
حمایت شما واسمون خیلی ارزش داره بچه ها
بهمون انرژی میده پست ها و آموزش های با کیفیت تری واستون درست کنیم
بهمون انرژی میده پست ها و آموزش های با کیفیت تری واستون درست کنیم
👏7❤1👎1
🔥5😁4❤1
💎 گیل GIL در پایتون 💎
چند وقتیه که یه موضوع خیلی بین پایتون کارا معروف شده اونم حذف شدنه GIL از مفسر پایتون GIL یا همون Global Interpreter Lock.
خب امروز میخوایم در موردش صحبت کنیم
حالا GIL چیه؟ 🤔
به زبان ساده، GIL یه قفل بزرگه که اجازه میده فقط یک ترد (thread) در یک زمان بتونه کد پایتون رو اجرا کنه. یعنی اگه چند تا ترد داشته باشی، هر دفعه فقط یکی از اونها میتونه کار کنه و بقیه باید منتظر بمونن.
❓ چرا GIL وجود داره؟
دلیل اصلی وجود GIL اینه که مدیریت حافظه توی پایتون به صورت خودکار انجام میشه. برای اینکه این مدیریت به درستی انجام بشه و مشکلی پیش نیاد، GIL اومده تا همه چیز رو کنترل کنه.
✅ خوبیه GIL چیه؟
1⃣ سادگی: GIL باعث میشه که مدیریت همزمانی در پایتون سادهتر بشه و برنامهنویس کمتر نگران مشکلات مربوط به همزمانی باشه.
2⃣ کارایی برای برنامههای تکترد ای: برای برنامههایی که از چندین هسته پردازنده استفاده نمیکنن، GIL مشکلی ایجاد نمیکنه و حتی ممکنه کارایی رو هم افزایش بده.
❌ بدیه GIL چیه؟
1⃣ محدودیت در استفاده از چندین هسته(core): بزرگترین مشکل GIL اینه که مانع از استفاده کامل چندین هسته پردازنده میشه. یعنی اگه برنامهای داشته باشی که عملیاتهای زیادی رو به صورت موازی انجام میده، GIL باعث میشه که این برنامهها به اندازه کافی سریع نباشن.
3⃣ مشکل برای برنامههای I/O-bound: حتی برای برنامههایی که بیشتر منتظر ورودی/خروجی هستن (مثل برنامههای شبکهای)، GIL میتونه باعث کاهش کارایی بشه.
❓ کجا از GIL استفاده میشه؟
باید بدونید GIL در همه مفسرهای پایتون وجود داره. پس اگه از پایتون استفاده میکنی، به طور خودکار با GIL سر و کار داری.
✅ اگه GIL حذف بشه چه خوبیهایی داره؟
1⃣ استفاده کامل از چندین هسته: حذف GIL باعث میشه که برنامههای پایتون بتونن به طور کامل از چندین هسته پردازنده استفاده کنن و کاراییشون به شدت افزایش پیدا کنه.
2⃣ بهبود کارایی در برنامههای همزمان: برنامههایی که از همزمانی استفاده میکنن، با حذف GIL به طور قابل توجهی سریعتر میشن.
❌ اگه GIL حذف بشه چه بدیهایی داره؟
1⃣ پیچیدگی بیشتر: حذف GIL باعث میشه که مدیریت همزمانی در پایتون پیچیدهتر بشه و برنامهنویس باید بیشتر دقت کنه تا از مشکلات مربوط به همزمانی جلوگیری کنه.
2⃣ مشکلات سازگاری: حذف GIL ممکنه باعث ایجاد مشکلات سازگاری با کتابخانههای قدیمی بشه.
🟢 خلاصه
فهمیدیم GIL یه ویژگی جالب و در عین حال چالشبرانگیز توی پایتون هست. هرچند که GIL باعث سادگی میشه، اما محدودیتهایی رو هم ایجاد میکنه. در سالهای اخیر تلاشهای زیادی برای بهبود مدیریت همزمانی توی پایتون و کاهش تأثیر GIL انجام شده، اما هنوز هم GIL یکی از مهمترین موضوعات بحث توی جامعه پایتون هست.
⭕️نکته:
جالبه بدونید GIL برای توابعی که cpu-bound هستن صدق میکنه و برای توابع I/O-bound اینجوری نیست یعنی توی توابعی که I/O-bound هستن ما میتونیم بصورت مولتی ترد عملیات رو هندل کنیم
نظر شما چیه؟ فکر میکنید GIL باید حذف بشه؟ یا اینکه وجودش لازمه؟ نظراتتون رو برام بنویسید.
#پایتون #GIL #برنامه_نویسی #همزمانی
چند وقتیه که یه موضوع خیلی بین پایتون کارا معروف شده اونم حذف شدنه GIL از مفسر پایتون GIL یا همون Global Interpreter Lock.
خب امروز میخوایم در موردش صحبت کنیم
حالا GIL چیه؟ 🤔
به زبان ساده، GIL یه قفل بزرگه که اجازه میده فقط یک ترد (thread) در یک زمان بتونه کد پایتون رو اجرا کنه. یعنی اگه چند تا ترد داشته باشی، هر دفعه فقط یکی از اونها میتونه کار کنه و بقیه باید منتظر بمونن.
❓ چرا GIL وجود داره؟
دلیل اصلی وجود GIL اینه که مدیریت حافظه توی پایتون به صورت خودکار انجام میشه. برای اینکه این مدیریت به درستی انجام بشه و مشکلی پیش نیاد، GIL اومده تا همه چیز رو کنترل کنه.
✅ خوبیه GIL چیه؟
1⃣ سادگی: GIL باعث میشه که مدیریت همزمانی در پایتون سادهتر بشه و برنامهنویس کمتر نگران مشکلات مربوط به همزمانی باشه.
2⃣ کارایی برای برنامههای تکترد ای: برای برنامههایی که از چندین هسته پردازنده استفاده نمیکنن، GIL مشکلی ایجاد نمیکنه و حتی ممکنه کارایی رو هم افزایش بده.
❌ بدیه GIL چیه؟
1⃣ محدودیت در استفاده از چندین هسته(core): بزرگترین مشکل GIL اینه که مانع از استفاده کامل چندین هسته پردازنده میشه. یعنی اگه برنامهای داشته باشی که عملیاتهای زیادی رو به صورت موازی انجام میده، GIL باعث میشه که این برنامهها به اندازه کافی سریع نباشن.
3⃣ مشکل برای برنامههای I/O-bound: حتی برای برنامههایی که بیشتر منتظر ورودی/خروجی هستن (مثل برنامههای شبکهای)، GIL میتونه باعث کاهش کارایی بشه.
❓ کجا از GIL استفاده میشه؟
باید بدونید GIL در همه مفسرهای پایتون وجود داره. پس اگه از پایتون استفاده میکنی، به طور خودکار با GIL سر و کار داری.
✅ اگه GIL حذف بشه چه خوبیهایی داره؟
1⃣ استفاده کامل از چندین هسته: حذف GIL باعث میشه که برنامههای پایتون بتونن به طور کامل از چندین هسته پردازنده استفاده کنن و کاراییشون به شدت افزایش پیدا کنه.
2⃣ بهبود کارایی در برنامههای همزمان: برنامههایی که از همزمانی استفاده میکنن، با حذف GIL به طور قابل توجهی سریعتر میشن.
❌ اگه GIL حذف بشه چه بدیهایی داره؟
1⃣ پیچیدگی بیشتر: حذف GIL باعث میشه که مدیریت همزمانی در پایتون پیچیدهتر بشه و برنامهنویس باید بیشتر دقت کنه تا از مشکلات مربوط به همزمانی جلوگیری کنه.
2⃣ مشکلات سازگاری: حذف GIL ممکنه باعث ایجاد مشکلات سازگاری با کتابخانههای قدیمی بشه.
🟢 خلاصه
فهمیدیم GIL یه ویژگی جالب و در عین حال چالشبرانگیز توی پایتون هست. هرچند که GIL باعث سادگی میشه، اما محدودیتهایی رو هم ایجاد میکنه. در سالهای اخیر تلاشهای زیادی برای بهبود مدیریت همزمانی توی پایتون و کاهش تأثیر GIL انجام شده، اما هنوز هم GIL یکی از مهمترین موضوعات بحث توی جامعه پایتون هست.
⭕️نکته:
جالبه بدونید GIL برای توابعی که cpu-bound هستن صدق میکنه و برای توابع I/O-bound اینجوری نیست یعنی توی توابعی که I/O-bound هستن ما میتونیم بصورت مولتی ترد عملیات رو هندل کنیم
نظر شما چیه؟ فکر میکنید GIL باید حذف بشه؟ یا اینکه وجودش لازمه؟ نظراتتون رو برام بنویسید.
#پایتون #GIL #برنامه_نویسی #همزمانی
🔥19👍5❤1
Ninja Learn | نینجا لرن
💎 گیل GIL در پایتون 💎 چند وقتیه که یه موضوع خیلی بین پایتون کارا معروف شده اونم حذف شدنه GIL از مفسر پایتون GIL یا همون Global Interpreter Lock. خب امروز میخوایم در موردش صحبت کنیم حالا GIL چیه؟ 🤔 به زبان ساده، GIL یه قفل بزرگه که اجازه میده فقط یک ترد…
دوستان با ریکشن زدن و شیر کردن از ما حمایت کنید ❤️😊
❤7
بچه ها توی گروه حتما جوین بشید میتونید هر سوالی که دارید اونجا بپرسید یا توی بحثای جذاب شرکت کنید 🫵
لینک گروه 👀
https://t.iss.one/+td1EcO_YfSphNTlk
لینک گروه 👀
https://t.iss.one/+td1EcO_YfSphNTlk
Telegram
Programmers City 🌆
گروه نینجا لرن🥷
🌐 channel link : https://t.iss.one/ninja_learn_ir
👥 Group link: https://t.iss.one/+td1EcO_YfSphNTlk
⚠️ Rules: https://t.iss.one/programmers_city_rules
🌐 channel link : https://t.iss.one/ninja_learn_ir
👥 Group link: https://t.iss.one/+td1EcO_YfSphNTlk
⚠️ Rules: https://t.iss.one/programmers_city_rules
👍5❤2🥰1
💎 موتور جاوااسکریپت (engine) 💎
امروز میخوایم بریم سراغ دو تا از مهمترین مفاهیم در متور جاوا اسکریپت: Call Stack و Memory Heap. که کدای ما توی این دوتا بخش اجرا میشه.
🤔 حالا Call Stack چیه؟
تصور کنید چندتا بشقاب روی هم داریم. هر وقت یه تابع جدید صدا میزنیم، یه بشقاب جدید روی بشقابای قبلی میذاریم. وقتی کار تابع تموم شد، بشقاب رو برمیداریم. این روند همون Call Stack ماست.
❓ چرا این مهمه؟
چون جاوا اسکریپت تک رشته ای هست (single thread) هست، یعنی هر بار فقط یه کار رو انجام میده. Call Stack به جاوا اسکریپت کمک میکنه بفهمه کدوم تابع باید بعد از تابع قبلی اجرا بشه.
🧐 حالا Execution Context درون call stack چیه؟
هر بار که یه تابع اجرا میشه، یه Execution Context جدید ایجاد میشه که به call stack اضافه میشه. این Context شامل دو بخش اصلی هست:
تصور کن یه درخت خانوادگی داریم. هر متغیری یه فرزند از نسل قبلی هست. Scope Chain به ما کمک میکنه تا از پایین به بالا در این درخت جستجو کنیم و مقدار متغیرها رو پیدا کنیم.
❓ حالا کلمه کلیدی This چیه؟
این کلمه کلیدی به شیء جاری اشاره میکنه. اما مقدار دقیقش به نحوه فراخوانی تابع بستگی داره. مثلا وقتی یه تابع به عنوان متد یک شیء فراخوانی میشه، this به اون شیء اشاره میکنه.
❓ حالا Memory Heap چیه؟
حالا بیایم سراغ Memory Heap. این قسمت مثل یه انبار بزرگه که همه دادههای برنامه توش ذخیره میشه. اشیاء، آرایهها و توابع همه در Heap قرار میگیرن.
❓ تفاوت Call Stack و Memory Heap چیه؟
فهمیدیم Call Stack و Memory Heap دو مفهوم اساسی در جاوا اسکریپت هستن که درک عمیقشون برای نوشتن کدهای کارآمد و عیبیابی بسیار مهمه.
@ninja_learn_ir
امروز میخوایم بریم سراغ دو تا از مهمترین مفاهیم در متور جاوا اسکریپت: Call Stack و Memory Heap. که کدای ما توی این دوتا بخش اجرا میشه.
🤔 حالا Call Stack چیه؟
تصور کنید چندتا بشقاب روی هم داریم. هر وقت یه تابع جدید صدا میزنیم، یه بشقاب جدید روی بشقابای قبلی میذاریم. وقتی کار تابع تموم شد، بشقاب رو برمیداریم. این روند همون Call Stack ماست.
❓ چرا این مهمه؟
چون جاوا اسکریپت تک رشته ای هست (single thread) هست، یعنی هر بار فقط یه کار رو انجام میده. Call Stack به جاوا اسکریپت کمک میکنه بفهمه کدوم تابع باید بعد از تابع قبلی اجرا بشه.
🧐 حالا Execution Context درون call stack چیه؟
هر بار که یه تابع اجرا میشه، یه Execution Context جدید ایجاد میشه که به call stack اضافه میشه. این Context شامل دو بخش اصلی هست:
🗂Variable Environment:
جایی که متغیرهای محیطی تابع ها ذخیره میشن.
🌳Scope Chain:حالا Scope Chain چیه؟ ⛓️
زنجیرهای از اشیاء است که برای پیدا کردن مقدار متغیرها استفاده میشه.
تصور کن یه درخت خانوادگی داریم. هر متغیری یه فرزند از نسل قبلی هست. Scope Chain به ما کمک میکنه تا از پایین به بالا در این درخت جستجو کنیم و مقدار متغیرها رو پیدا کنیم.
❓ حالا کلمه کلیدی This چیه؟
این کلمه کلیدی به شیء جاری اشاره میکنه. اما مقدار دقیقش به نحوه فراخوانی تابع بستگی داره. مثلا وقتی یه تابع به عنوان متد یک شیء فراخوانی میشه، this به اون شیء اشاره میکنه.
❓ حالا Memory Heap چیه؟
حالا بیایم سراغ Memory Heap. این قسمت مثل یه انبار بزرگه که همه دادههای برنامه توش ذخیره میشه. اشیاء، آرایهها و توابع همه در Heap قرار میگیرن.
❓ تفاوت Call Stack و Memory Heap چیه؟
Call Stack:
برای اجرای کد استفاده میشه و بر اساس
اصل LIFO (Last In, First Out) کار میکنه.
Memory Heap:✅ جمعبندی
برای ذخیره دادهها استفاده میشه و حافظه به صورت پویا تخصیص داده میشه.
فهمیدیم Call Stack و Memory Heap دو مفهوم اساسی در جاوا اسکریپت هستن که درک عمیقشون برای نوشتن کدهای کارآمد و عیبیابی بسیار مهمه.
#جاوااسکریپت #callstack #memoryheap #executioncontext #scope #this
👍15❤2
دوستان براتون یه چالش خفن دارم 😁
برید درمورد DSA یا همون
تحقیق بکنید و بیاید چیزی که یاد گرفتید رو اینجا بگید 👇
https://t.iss.one/+td1EcO_YfSphNTlk
اگه موافقید درموردش یه پستم درست میکنم
@ninja_learn_ir
برید درمورد DSA یا همون
Digital signature algorithm
تحقیق بکنید و بیاید چیزی که یاد گرفتید رو اینجا بگید 👇
https://t.iss.one/+td1EcO_YfSphNTlk
اگه موافقید درموردش یه پستم درست میکنم
Telegram
Programmers City 🌆
گروه نینجا لرن🥷
🌐 channel link : https://t.iss.one/ninja_learn_ir
👥 Group link: https://t.iss.one/+td1EcO_YfSphNTlk
⚠️ Rules: https://t.iss.one/programmers_city_rules
🌐 channel link : https://t.iss.one/ninja_learn_ir
👥 Group link: https://t.iss.one/+td1EcO_YfSphNTlk
⚠️ Rules: https://t.iss.one/programmers_city_rules
👍9❤1👏1
سلام رفقا 👋
یه پست اینستا گذاشتیم مخصوص پایتون کارا 😉
ممنون میشیم که از ما با لایک و کامنت گذاشتن حمایت کنید 🌹😊
https://www.instagram.com/p/C-nOBcEMQ-f/?igsh=bDRremI1a3B5dTZv
یه پست اینستا گذاشتیم مخصوص پایتون کارا 😉
ممنون میشیم که از ما با لایک و کامنت گذاشتن حمایت کنید 🌹😊
https://www.instagram.com/p/C-nOBcEMQ-f/?igsh=bDRremI1a3B5dTZv
👍8☃2
Ninja Learn | نینجا لرن pinned «سلام رفقا 👋 یه پست اینستا گذاشتیم مخصوص پایتون کارا 😉 ممنون میشیم که از ما با لایک و کامنت گذاشتن حمایت کنید 🌹😊 https://www.instagram.com/p/C-nOBcEMQ-f/?igsh=bDRremI1a3B5dTZv»