Ninja Learn | نینجا لرن
1.23K subscribers
105 photos
41 videos
12 files
326 links
یادگیری برنامه نویسی به سبک نینجا 🥷
اینجا چیزایی یاد میگیری که فقط نینجاهای وب‌ بلدن 🤫

📄 Send me post: https://t.iss.one/NoronChat_bot?start=sec-fdggghgebe

👥 ɢʀᴏᴜᴘ: https://t.iss.one/+td1EcO_YfSphNTlk
Download Telegram
این داستان Pypy 🐉

‏PyPy ابزاری قدرتمند برای برنامه‌نویس‌های پایتونه که به دنبال بهبود پرفورمنس کدهای خودشون هستن. اگه با کندی اجرای کد تو پروژه‌هاتون مواجه شدین یا می‌خواین بدونین چطور می‌شه سرعت پایتون رو بدون تغییر زیاد تو کد بالا برد، این پست برای شماست. اینجا قراره بررسی کنیم PyPy چیه، چه قابلیت‌هایی داره، کجا به کار میاد و چه محدودیت‌هایی داره.

🧠اول از همه PyPy چیه؟
PyPy یه مفسر (interpreter) جایگزین برای پایتونه که به جای CPython (مفسر استاندارد پایتون که با C نوشته شده) استفاده می‌شه. PyPy خودش با پایتون (به طور دقیق‌تر، یه زیرمجموعه به اسم RPython) پیاده‌سازی شده و از Just-In-Time Compilation (JIT) برای کامپایل کردن کد پایتون به کد ماشین تو زمان اجرا استفاده می‌کنه. این باعث می‌شه تو خیلی از سناریوها سرعتش به مراتب از CPython بیشتر باشه.

شروع این پروژه به سال ۲۰۰۲ برمی‌گرده و حالا یه پروژه متن‌باز با جامعه‌ای فعاله که مدام در حال بهبودشه. هدف PyPy اینه که کدهای پایتون رو سریع‌تر، بهینه‌تر و بدون نیاز به تغییر زیاد تو ساختار کد اجرا کنه.


📚 قابلیت‌های مهم PyPy

‏PyPy چندتا ویژگی اصلی داره که اون رو از CPython متمایز می‌کنه:

1⃣ سرعت بالا با JIT Compilation
‏PyPy به جای تفسیر خط‌به‌خط کد (مثل CPython)، بخش‌های پرتکرار کد رو به کد ماشین کامپایل می‌کنه. این یعنی برای حلقه‌ها و عملیات تکراری، سرعتش خیلی بیشتره.
مثال: یه تابع ساده برای محاسبه فیبوناچی:

  def fib(n):
if n <= 1:
return n
return fib(n-1) + fib(n-2)
print(fib(35))

تو CPython این کد برای n=35 ممکنه چند ثانیه طول بکشه، ولی تو PyPy به لطف JIT خیلی سریع‌تره (گاهی تا ۷ برابر).

2⃣ سازگاری بالا با پایتون
‏PyPy سعی می‌کنه تا حد زیادی با استانداردهای CPython سازگار باشه، یعنی اکثر کدهای پایتون بدون تغییر روی PyPy اجرا می‌شن.
مثلا اگه یه اسکریپت با Python 3.8 روی CPython کار کنه، به احتمال زیاد روی PyPy هم بدون دردسر اجرا می‌شه مگر از کتابخانه هایی استفاده کرده باشید که C extension استفاده میکنه.

3⃣ مصرف حافظه بهینه
‏PyPy یه Garbage Collector پیشرفته داره که می‌تونه مصرف حافظه رو تو بعضی سناریوها بهینه‌تر از CPython کنه.
کاربردشم تو برنامه‌هایی که مدت طولانی اجرا می‌شن (مثل وب‌سرورها) و نیاز به مدیریت خوب حافظه دارن.

4⃣پشتیبانی از Stackless Python
‏PyPy از قابلیت‌های Stackless Python (مثل micro-threads یا taskletها) پشتیبانی می‌کنه که برای برنامه‌های concurrent مناسبن.

🔍 چرا PyPy مناسبه؟
PyPy تو موقعیت‌هایی که پرفورمنس کد حیاتیه، می‌تونه بازی رو عوض کنه:

سرعت:
تو بنچمارک‌های مختلف، PyPy برای کدهای محاسباتی (مثل حلقه‌ها و الگوریتم‌های ریاضی) تا ۷ برابر سریع‌تر از CPython عمل کرده.

بدون نیاز به بازنویسی کد: برخلاف ابزارهایی مثل Cython که نیاز به تغییر کد دارن، PyPy فقط با تغییر مفسر کار می‌کنه.

متن‌باز و فعال:
جامعه PyPy مدام داره باگ‌ها رو فیکس می‌کنه و پشتیبانی از نسخه‌های جدید پایتون رو اضافه می‌کنه.


🛠 کجا PyPy به کار میاد؟

1⃣ محاسبات سنگین:
اگه پروژه‌تون پر از حلقه‌های پیچیده یا الگوریتم‌های محاسباتیه (مثل پردازش داده یا شبیه‌سازی)، PyPy سرعت رو حسابی بالا می‌بره.

2⃣ وب‌سرورها:
برای وب‌اپلیکیشن‌هایی که با فریم‌ورک‌هایی مثل Flask یا Django کار می‌کنن، PyPy می‌تونه پاسخ‌گویی رو بهتر کنه.

3⃣ اسکریپت‌های طولانی‌مدت: برنامه‌هایی که مدت زیادی اجرا می‌شن (مثل دیمن‌ها یا سرویس‌ها) از بهینه‌سازی حافظه PyPy سود می‌برن.

📚 محدودیت‌های PyPy

هرچند PyPy عالیه، ولی محدودیت‌هایی هم داره:

1⃣ عدم پشتیبانی کامل از C Extensions:
خیلی از کتابخونه‌های پایتون (مثل NumPy، Pandas یا TensorFlow) از C Extensionها استفاده می‌کنن که تو PyPy ممکنه کندتر باشن یا کار نکنن. البته PyPy داره روی این موضوع کار می‌کنه.

2⃣ سربار اولیه JIT:
‏PyPy تو شروع اجرا یه کم کندتره چون باید کد رو کامپایل کنه. برای اسکریپت‌های کوتاه این می‌تونه نقطه‌ضعف باشه.

3⃣ مصرف حافظه اولیه:
‏ PyPy گاهی تو شروع کار حافظه بیشتری نسبت به CPython مصرف می‌کنه.

جمع‌بندی

PyPy یه ابزار قدرتمنده که می‌تونه کدهای پایتون شما رو بدون نیاز به بازنویسی، سریع‌تر و بهینه‌تر اجرا کنه. با استفاده از JIT Compilation، این مفسر برای پروژه‌های محاسباتی، وب‌اپلیکیشن‌ها و اسکریپت‌های طولانی‌مدت یه انتخاب عالیه. هرچند محدودیت‌هایی مثل سازگاری با C Extensionها داره، ولی برای خیلی از سناریوها می‌تونه پرفورمنس رو چند برابر کنه.

#️⃣ #web #programming

 
🥷🏻 CHANNEL | GROUP
10
Media is too big
VIEW IN TELEGRAM
خیلی از ما همینیم :)

 
🥷🏻 CHANNEL | GROUP
👍101
Forwarded from Linuxor ?
توی ماشین لرنینگ برای اینکه بفهمیم هرکدوم از ویژگی ها چقدر توی خروجی تاثیر داشته راه های مختلفی وجود داره با SHAP می‌تونید راحت این کارو انجام بدید، SHAP یه روش برای توضیح خروجی مدل‌های یادگیری ماشینه که از مفهوم Shapley value در نظریه بازی‌ها الهام گرفته. توی نظریه بازی، Shapley value منصفانه مشخص می‌کنه هر بازیکن چقدر در نتیجه‌ی تیم سهم داشته؛ SHAP همین ایده رو برای ویژگی‌های داده به کار می‌گیره. یعنی برای هر پیش‌بینی مشخص، حساب می‌کنه هر فیچر (مثل سن، درآمد یا سابقه خرید) چه میزان در نتیجه نهایی مدل نقش مثبت یا منفی داشته. اینطوری می‌شه دقیق فهمید که چرا مدل به یه تصمیم خاص رسیده.

shap.readthedocs.io

@Linuxor
👍9
بدون اینکه مستقیم اشاره کنید بگید با چه زبان برنامه‌نویسی کار میکنید 🙂‍↔️
7
This media is not supported in your browser
VIEW IN TELEGRAM
⁦ಠ⁠_⁠ʖ⁠ಠ⁩

 
🥷🏻 CHANNEL | GROUP
3💔3🤣1
وقتی اولین خط کدتون رو نوشتید چه حسی داشتید؟ 🤔
من که داشتم بوگاتیمو تصور میکردم 😂

 
🥷🏻 CHANNEL | GROUP
🤣214
دوساعت پست نوشتم دستم خورد کلش پاک شد
🤣14💔5
شرمنده برای فعالیت کم بسیار درگیر هستم 😔
14
Forwarded from 👾 Geek Engineers ([ Taha. Dostifam ])
این هم از زبان برنامه نویسی Cyrus که ما موفق به ساختش شدیم.

قدیمیای کانال از روند توسعه ش خبر دارن :)
منتها حقیقتا راه دور و درازی در پیش داریم که توسعه کامپایلر مصیبت های خودشو داره. منتها با کمک و همراهی شما دوستان پیشرفت خیلی زیادی داشتیم و امیدواریم که از پس جبران حمایت های شما بر بیایم.

در حال حاضر داریم type system رو تست میکنیم تا اینکه تا حدی stable بشه. هر موقع استیبل بشه به ادامه دولوپ فیچر های high level مثل error handling و macro ها و generic type ها خواهیم پرداخت انشالله.

#cyrus
@cyrus_lang
https://github.com/cyrus-lang/Cyrus
👏195🔥1
این GIL پایتون چقدر دردسر سازه 😬
👍6
Ninja Learn | نینجا لرن
این GIL پایتون چقدر دردسر سازه 😬
یه پست بعدا راجبش میسازم که چرا دردسر سازه و چجوری میشه دورش زد :)
8
https://github.com/lolgg313/HPE

یه پروژه جالب پیدا کردم
با پایتون game engine ساختن :)
جالبه کارم میکنه و باحاله
5🔥3👍1
Ninja Learn | نینجا لرن
یه پست بعدا راجبش میسازم که چرا دردسر سازه و چجوری میشه دورش زد :)
خب همونجور که میدونید درمورد GIL یا همون Global Interpreter Lock بحث زیاده 🤯

مشکل ما با GIL چیه؟
اینه که نمیذاره مولتی‌تردینگ واقعی داشته باشیم.
یعنی چی؟
یعنی نمی‌تونیم چندتا تسک رو همزمان روی چندتا ترد اجرا کنیم.
چرا؟
چون GIL میگه:
«در هر لحظه فقط یه ترد حق داره اجرا بشه، بقیه باید وایسن نوبتشون بشه.»

حالا نکته بامزه اینجاست:
اگه بیای چندتا ترد ران کنی، این تردا میان سر GIL دعوا می‌کنن کلی context switching می‌خوره latency میره بالا یه عالمه overhead میاد رو برنامه.
نتیجه؟ مولتی‌تردینگ برای کارای CPU-bound نه تنها کمک نمی‌کنه، بدترم می‌کنه برای همین باید single-thread باشه 😅
(احتمالاً خودتونم وقتی async برای CPU-bound نوشتید دیدید چه وضعیه.)

حالا چرا اصلاً GIL وجود داره؟
سؤال خوبیه 👌
خیلی خلاصه بگم نذاشته پایتون به چوخ بره 😂
چطوری؟
میاد thread safety رو برات تضمین می‌کنه، نمیذاره race condition بیاد وسط و همه چی بترکه.

ولی خب GIL دردسرم کم درست نمیکنه:

نمیذاره مولتی‌تردینگ CPU-bound داشته باشیم.

بعدم بخوای حذفش کنی هزاران لایبری که با درنظر گرفتن gil نوشته شده باید اپدیت بشن :)

و....
کلاً محدودمون می‌کنه.

راه‌حل چیه؟

1. C Extension
یعنی توابع سنگینت رو تو C بنویسی، اونجا اجرا بشه، فقط از پایتون صدا بزنی. اینجوری GIL رو می‌تونی دور بزنی.

2. Multiprocessing
این یکی مطرح ترین راهه. به تعداد core های CPU پروسس بالا میاری. هر پروسس مفسر خودش و در نتیجه GIL خودش رو داره اینجا واقعاً موازی میشه.
ولی اینجا یه توهمه که «ایول مشکل حل شد»…
سخت در اشتباهید 😅
چرا؟
چون:
ـprocess خیلی سنگینه، هر کدوم کلی overhead دارن.

ارتباط بین processها (همون IPC) خودش یه هزینه‌ی جداست.
داده‌ها باید بین processها جابه‌جا بشن (queue، pipe، shared memory و …) که اینم کندی و مصرف حافظه میاره.

گزینه اپشنال شدن گیل هم توی ۳.۱۳ کامل گیل رو حذف نمیکنه میتونیم مولتی پراسسینگ و موازی سازی کنیم ولی خب خودشون هنوز تایید نکرده و ازمایشیه و کلی مشکلات داره.

گزینه هاییم هست مثل استفاده از nogil که خب یکسری مشکلات دارن که توی این پست جا نمیشن بگم

📌 خلاصه: GIL هم ناجیه، هم قاتل. ناجی چون امنیت میده، قاتل چون مولتی‌تردینگ CPU-bound رو ازمون میگیره. ولی خب این مورد توی I/O bound process نیست چون وقتی یه پراسس io ران میشه گیل خاموش میشه و میتونی parallel processing داشته باشی :)

#️⃣ #web #programming

 
🥷🏻 CHANNEL | GROUP
❤‍🔥122👍2
هرخارجی که ویوش کم میشه یه ویدیو درمورد ایران میسازه یا فارسی حرف میزنه ویوهاش میلیونی میشه 😂😂

ماهم بیایم یه مدت محتوای انگلیسی بزاریم یهو فارسی صحبت کنیم 🗿
Yea man this a business
🤣21
This media is not supported in your browser
VIEW IN TELEGRAM
فقط اونجایی که گفت برادر c رو زبان سطح بالا صدا زد 😂
🤣17🔥4
Ninja Learn | نینجا لرن
فقط اونجایی که گفت برادر c رو زبان سطح بالا صدا زد 😂
میتونم به جرعت بگم یکی از اشخاصیه که ۲۰۰ سال دیگه هم هوش مصنوعی نمیتونه جاشو بگیره🗿
10
Forwarded from LearnPOV
با اعضای تیم لرن‌ پی‌ او وی آشنا شید 🥇

توی صفحه تیم ما میتونید اعضای تیم LearnPOV آشنا بشید 😉


🔗 مشاهده تیم ما

🏫 @LearnPOV | اولین شبکه اجتماعی آموزشی
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4