بايثون بطيئة!؟ وهل يمكن جعلها أسرع؟ 🤫 إليك السر! معروف أن بايثون إنها لُغةٌ سهلة التعلم، لكنها صعبةُ الإتقان وأروع لغة برمجة على الإطلاقِ. يقول البعض، ينال منها عيب خطيرٌ يُهدد وجودها ويسير بها نحو الفناء فمسألة البطء والسرعة في لغة بايثون مشكلة جليلة لا يمكن للمبرمج غض البصر عنها والبعض الآخر يراها فوق الفناء والزوال فهي وُجدت لتُحَب رغم عيوبها... ويبقى الفريقان في جدل مستمر ! كلامهم صحيح نوعا ما، إلّا أننا نستطيع جعلها أسرع لتنجز نصف مليار عملية في الثانية!
جدلٌ جئنا اليوم كي نقوم بحسمه للأبد! لقد حان الوقت لوضع لغة بايثون رهن التحقيق، لإزالة الغموض عن أسوء شُبهتين وأخطرهما في عالم لغات البرمجة على الإطلاق. ألا وهما الآداءُ السيء والبطء! !
في الفيديو أعلاه، ستتعرفون عن قربٍ على التصميم الداخلي للغة بايثون:
- كيف يتأثر الآداء؟
- ما الذي يحصل وراء الكواليس؟
- كيف تعمل لغة بايثون؟
- ما طبيعة العلاقة بينها وبين لغة السي؟
ونحن نجيب عن هذه الأسئلة، ستتعرفون على الـCompiler والـInterpreter وعلى الرحلة التي يقطعها كودك البرمجي ليصبح لغة الآلة ويخاطب مُعالجات الكومبيوتر، إضافة إلى الـdynamic typing(تلقائية التعرف على البيانات) والـmultiprocessing (تعدد المعالَجات)، إلى أن نجعل لغة بايثون أسرع بآلاف المرات بالإستعانة بـأي من هذه المكتبات:
- Cython
- Numba
- PyPy
وصدقنا إن أخبرناك بأن هذا الشرح سيكون صديقاً للمبتدئين beginner friendly!
def prime_py(range_start, range_end):
count_of_primes = 0
range_start = range_start if range_start >= 2 else 2
for num in prange(range_start, range_end + 1):
for div_num in prange(2, num):
if ((num % div_num) == 0):
break
else:
count_of_primes += 1
return count_of_primes
بداية تثبيت حزمة cython:
pip3 install cython
وأدوات البناء C/C++ (ضرورية)
sudo apt-get install build-essential
python -m pip install cython
يجب عليك تثبيت MinGW الذي يحتوي مترجمات لغة السي من هنا SourceForge
الخطوة التالية ضرورية جداً، يجب إضافة مسار مجلد Bin من البرنامج إلى مسارات البيئة في نظام الويندوز، الأمر سهل، إذهب الى Start واكتب Environment Variables واختر هذه الأيقونة، ثم أنقر على Environment Variables، هنا في الأسفل إبحث عن متغير PATH ثم أضف إليه مسار مجلد Bin واعمل حفظ.
pip3 install cython
تحميل أدوات المطورين XCode developer tools عبر تثبيت إضافة Command Line Tools يجب تثبيت xcode أولا وبعدها وافق على تنصيت الـ Command Line Tools والأمور تمام
sudo xcode-select --install
المهم بعد تثبيت مترجم لغة السي أياً كان نظام تشغيلك، قم بالتأكد من أنه يعمل عبر كتابة الأمر التالي :
gcc –version
إذا ظهر لك اصدار المُترجِم فالأمورُ تمام.
def prime_py(int range_start, int range_end):
cdef int count_of_primes = 0
cdef int num
cdef int div_num
range_start = range_start if range_start >= 2 else 2
for num in prange(range_start, range_end + 1):
for div_num in prange(2, num):
if ((num % div_num) == 0):
break
else:
count_of_primes += 1
return count_of_primes
import pyximport; pyximport.install()
from Primes_cython import prime_py
print(prime_py(0,100000))
تنبيه : يجب أن يكون ملف Primes_cython موجود في نفس مجلد الكود
pip install numba
تقوم Numba بترجمة الوظائف المكتوبة بلغة بايثون إلى لغة الآلة في وقت التشغيل، باستخدام مترجِم يُدعى الـ LLVM. هذا المُترجم يلتقط الدوال من الـ bytecode قبل أن تذهب إالى المُفسّر الخاص بلغة بايثون ويحولها إلى كود آلة أصلي بلمح البصر ليتم تنفيذها على المعالج مباشرة.
وسرعة هذا المترجِم يُمكن أن تُضاهي سرعة لغتي السي والفورتران، بخلاف الحلول الأخرى مع نامبا لست بحاجة إلى استبدال مترجم Python أو تشغيل خطوة ترجمة منفصلة أو حتى تثبيت مترجم السي، فقط قم بتثبيت المكتبة وإضافة المؤثِت Decorator إلى الكود، ونامبا تقوم بالباقي ! لا يوجد أسهل من هذا، أبداً، تابع التجربة والشرح الموجود في الفيديو على اليوتيوب..
from numba import jit
@jit()
def prime_py(range_start, range_end):
count_of_primes = 0
range_start = range_start if range_start >= 2 else 2
for num in prange(range_start, range_end + 1):
for div_num in prange(2, num):
if ((num % div_num) == 0):
break
else:
count_of_primes += 1
return count_of_primes
from numba import jit , prange
@jit(parallel=True)
def prime_py(range_start, range_end):
count_of_primes = 0
range_start = range_start if range_start >= 2 else 2
for num in prange(range_start, range_end + 1):
for div_num in prange(2, num):
if ((num % div_num) == 0):
break
else:
count_of_primes += 1
return count_of_primes
إذن كما هو معلوم PyPy يمكن اعتباره توزيعة مختلفة من بايثون، نقوم بتحميله من
نقوم بفك الضغط ووضعه في مجلد في مكان ما بحاسبنا، أنا أفضل القرص سي نذهب إلى الـ envirenement path ونضيف مسار المجلد إليه إذن الآن إذا كتبنا pypy في مسطّر الأوامر، يجب أن يعمل مثل بايثون
تذكير : الأكواد موجودة في المستودع، والفيديو على اليوتيوب يشرح كل شيء .
أتمنى أن نحصل على المزيد من الرعاية والدعم لنتمكن من توفير المزيد من الحلقات الغنية، أيضاً يمكنكم دعمنا بـ 5 دولار عبر زر شكراً الموجود قرب زر الإعجاب بالحلقة في اليوتيوب
تذكروا أن كل مساهماتكم ستبقى صدقةً جارية للعلم في هذه القناة، تذكروا كذلك أن تعليقاتكم مهمة جداً كي تصِل الحلقة إلى أكبر عدد ممكن من الناس، لا تترددوا في نشر الحلقة إنها عبارة عن مادة علمية خالية من كل المخالفات، تحياتي