HyperAI
Back to Headlines

القفز بأداء المعالجات المتوازية في Python بفضل التجربة الحرة للتوصيل

منذ 2 أيام

تحسين الأداء باستخدام DataFrames ثابتة في Python متعدد الخيوط تاريخ الحدث والشخصيات الرئيسية في يوليو 2023، قبل مجلس إدارة Python المقترح PEP 703 "جعل Global Interpreter Lock اختياريًا في CPython". هذا المقترح جعل Python 3.13 يتضمن بناءً تجربة خالية من القفل العالمي للمترجم (GIL)، والذي أصبح رسميًا ومساندًا في Python 3.14 بعد قبول PEP 779 في يونيو 2025. السبب والمراحل العمليات التي تتم على كل صف في DataFrame هي عملية شائعة يمكن أن تكون متوازية بسهولة، حيث يمكن معالجة كل صف بشكل مستقل. ومع وجود CPU متعددة النوى، يمكن معالجة العديد من الصفوف في وقت واحد. ومع ذلك، حتى وقت قريب، كان من الصعب استغلال هذه الفرصة في Python بسبب القيود التي فرضها القفل العالمي للمترجم (GIL). مع بناء Python 3.13 التجريبية الخالية من GIL، أصبح من الممكن تحقيق توازي حقيقي ومتعدد الخيوط للعمليات المرتبطة بـ CPU. هذا التغيير يوفر فوائد أداء استثنائية، حيث يمكن لـ StaticFrame 3.2 مع Python 3.13t أن يطبق الدوال على الصفوف في DataFrame بمعدل يزيد عن ضعفين مقارنة بالتنفيذ الأحادي الخيط. النتائج على سبيل المثال، عند حساب مجموع القيم الزوجية لكل صف في DataFrame مربع يحتوي على مليون عدد صحيح باستخدام Python 3.13t، انخفض وقت التنفيذ بنسبة تزيد عن 60% من 21.3 ميلي ثانية إلى 7.89 ميلي ثانية. هذا التحسن في الأداء ثابت عبر مجموعة واسعة من أشكال وتركيبات DataFrames، ويتناسب مع حجم DataFrame. في المقابل، عند استخدام Python القياسية مع GIL مفعّلًا، غالبًا ما يؤدي التعامل متعدد الخيوط مع العمليات المرتبطة بـ CPU إلى تدهور الأداء. على سبيل المثال، يزيد وقت التنفيذ من 17.7 ميلي ثانية باستخدام خيط واحد إلى حوالي 40 ميلي ثانية مع التعددية الخيوط. تجنب المخاطر يتيح StaticFrame تجنب مخاطر مثل التنازع على الخيوط أو السباقات على البيانات من خلال فرض الثباتية (immutability): يضمن السلامة بين الخيوط بشكل ضمني، مما ي��除 الحاجة إلى القفل أو النسخ الدفاعي. يتم تحقيق هذا من خلال استخدام مصفوفات NumPy الثابتة (حيث يتم تعطيل خاصية الكتابة) وتقييد التعديلات في مكانها. اختبارات الأداء الموسعة تتطلب تقييم خصائص الأداء لهيكل بيانات معقد مثل DataFrame اختبار أنواع متعددة من DataFrames. أجريت اختبارات على تسع أنواع مختلفة من DataFrames، بテストت جميع تركيبات ثلاثة أشكال وثلاثة مستويات من تجانس الأنواع. الأشكال المختبرة هي: DataFrame طويل (10,000 × 100)، مربع (1,000 × 1,000)، وواسع (100 × 10,000). مستويات تجانس الأنواع هي: عمودي (لا يوجد أعمدة متجاورة بنفس النوع)، مختلط (مجموعات من أربع أعمدة متجاورة بنفس النوع)، ومتجانس (جميع الأعمدة بنفس النوع). الأداء باستخدام Python 3.13t متعدد الخيوط كما هو موضح أدناه، الفوائد الأدائية للتعامل متعدد الخيوط في Python 3.13t ثابتة عبر جميع أنواع DataFrames المختبرة: ينخفض وقت المعالجة بنسبة لا تقل عن 50% وفي بعض الحالات تزيد عن 80%. يتحسن الأداء بشكل أكبر مع DataFrames تحتوي على 100 مليون عنصر (1e8)، حيث ينخفض وقت المعالجة بنسبة تزيد عن 70% لجميع أنواع DataFrames تقريبًا. الأداء باستخدام Python 3.13 القياسية قبل Python الخالية من GIL، كان التعامل متعدد الخيوط مع التطبيقات المرتبطة بـ CPU يسبب تدهورًا في الأداء. كما هو موضح أدناه، تظهر نفس الاختبارات أن وقت المعالجة يزيد من ضعفين إلى عشرة أضعاف وقت التنفيذ الأحادي الخيط. الأداء باستخدام Python 3.13 القياسية متعدد العمليات كان التعامل متعدد العمليات هو الخيار الوحيد للتنفيذ المتوازي قبل Python الخالية من GIL. ومع ذلك، لم تكن هناك فوائد إلا إذا كان حجم العمل لكل عملية كبيرًا بما يكفي لتغطية تكلفة إنشاء مترجم لكل عملية ونسخ البيانات بين العمليات. كما هو موضح أدناه، التعامل متعدد العمليات مع دوال التطبيق على الصفوف يسبب تدهورًا كبيرًا في الأداء، حيث يزيد وقت العملية من ضعفين إلى عشرة أضعاف وقت التنفيذ الأحادي الخيط. وضع Python الخالية من GIL تهدف PEP 779 إلى وضع معايير لدعم Python الخالية من GIL رسمياً. في Python 3.14، ستدخل Python الخالية من GIL المرحلة الثانية: غير تجريبية ومساندة رسمياً. رغم عدم اليقين حول موعد اعتمادها كخيار افتراضي، فإن المسار واضح نحو تحقيق ذلك. الخاتمة تطبيق الدوال على الصفوف في DataFrame هو مجرد بداية: يمكن أن تحقق عمليات أخرى مثل عمليات التجميع وتطبيق الدوال على النوافذ فوائد أداء مماثلة. هذا التحسن في الأداء يوفر فرصًا كبيرة لتحسينات كبيرة في الأداء، خاصة مع القدرة على مشاركة الهياكل البيانات الثابتة بأمان بين الخيوط. مع Python 3.14، يصبح Python أسرع بنسبة 20% إلى 40% مقارنة بـ Python 3.10، مما يفتح الباب أمام تحسينات أداء هائلة في التطبيقات التي تعتمد بشكل كبير على مكتبات C مثل NumPy. تقييم الحدث من قبل المختصين يعد تحسين الأداء في Python باستخدام DataFrames ثابتة وبناء Python الخالي من GIL خطوة importante نحو جعل Python أكثر كفاءة في التعامل مع البيانات الكبيرة. هذا التطور من شأنه أن يعزز استخدام Python في مجالات مثل تعلم الآلة والتحليلات الكبيرة، حيث يتمثل الأداء في العوامل الحاسمة. مع استمرار تطور CPython ودعم المكتبات الحاسمة مثل NumPy، من المتوقع أن تصبح Python الخالية من GIL الخيار الافتراضي في المستقبل القريب، مما يوفر فرصًا غير محدودة لتحسينات الأداء. نبذة تعريفية عن StaticFrame StaticFrame هي مكتبة Python مفتوحة المصدر مصممة لمعالجة البيانات الكبيرة بكفاءة عالية. تتميز StaticFrame بخصائصها الثابتة (immutability)، مما يجعلها آمنة للتعامل متعدد الخيوط وخفيفة الوزن في الذاكرة. تقدم StaticFrame واجهات بسيطة وقوية للتعامل مع بيانات الجداول، مما يجعلها خيارًا ممتازًا للمطورين الذين يبحثون عن أداء أفضل وسلامة بيانات أعلى في تطبيقاتهم.

Related Links