سؤال

موثوق بها المبرمج قال لي صديق أن بايثون الحالي متعدد خيوط التنفيذ بجدية عربات التي تجرها الدواب - بما فيه الكفاية لتجنب استخدام تماما.ماذا يمكن أن يقال عن هذه الإشاعة ؟

هل كانت مفيدة؟

المحلول

بيثون المواضيع جيدة المتزامنة I/O البرمجة.المواضيع تبديل الخروج من وحدة المعالجة المركزية بمجرد كتلة انتظار الإدخال من ملف الشبكة ، إلخ.هذا يسمح أخرى الثعبان المواضيع إلى استخدام وحدة المعالجة المركزية في حين أن آخرين الانتظار.هذا من شأنه أن تسمح لك لكتابة متعددة الخيوط ملقم ويب أو الزاحف على شبكة الإنترنت على سبيل المثال.

ومع ذلك ، بيثون المواضيع المتسلسلة من قبل جيل عندما أدخل مترجم الأساسية.هذا يعني أنه إذا كان اثنين من المواضيع الطحن الأرقام واحد فقط يمكن تشغيلها في أي لحظة.وهذا يعني أيضا أنه لا يمكنك الاستفادة من متعددة النواة أو متعددة المعالجات أبنية.

هناك حلول مثل تشغيل متعددة الثعبان المترجمين بشكل متزامن باستخدام C خيوط المكتبة.هذا ليس لضعاف القلب وفوائد قد لا يكون يستحق كل هذا العناء.دعونا نأمل كل الثعبان الحل في إصدار مستقبلي.

نصائح أخرى

مستوى تنفيذ بايثون (المعروف عموما باسم CPython كما هو مكتوب في C) يستخدم نظام التشغيل المواضيع ، ولكن لأن هناك مترجم العالمي قفل, فقط موضوع واحد في وقت يسمح لتشغيل كود بايثون.ولكن ضمن هذه الحدود ، خيوط المكتبات قوية وتستخدم على نطاق واسع.

إذا كنت تريد أن تكون قادرة على استخدام وحدة المعالجة المركزية متعددة النوى ، هناك عدد قليل من الخيارات.واحد هو استخدام متعددة الثعبان المترجمين في وقت واحد ، كما ذكر من قبل الآخرين.وثمة خيار آخر هو استخدام مختلف تنفيذ بيثون التي لا تستخدم جيل.هل Jython و IronPython.

Jython هو مكتوب في جاوة ، و هو الآن ناضجة إلى حد ما ، على الرغم من بعض عدم التوافق لا تزال قائمة.على سبيل المثال ، في إطار الشبكة جانغو لا يعمل تماما بعد, ولكن هو الحصول على أوثق في كل وقت.Jython هو كبيرة للسلامة الموضوع, يخرج أفضل المعايير وقد صفيق رسالة لأولئك الذين يريدون جيل.

IronPython يستخدم .NET framework و هو مكتوب في C#.التوافق هو الوصول إلى مرحلة حيث جانغو يمكن تشغيلها على IronPython (على الأقل كما demo) وهناك أدلة على استخدام المواضيع في IronPython.

جيل (مترجم العالمي قفل) قد يكون مشكلة ، ولكن API هو موافق تماما.محاولة الخروج من ممتازة processing الوحدة التي تنفذ خيوط API عمليات منفصلة.أنا باستخدام هذا الحق الآن (ولو على OS X حتى لا تضطر إلى القيام ببعض التجارب على ويندوز) وأنا أعجب حقا.طابور الصف حقا إنقاذ بلدي لحم الخنزير المقدد في مجال إدارة التعقيد!

تحرير:فإنه seemes تجهيز وحدة يتم تضمين في المكتبة القياسية اعتبارا من الإصدار 2.6 (import multiprocessing).الفرح!

بقدر ما أعرف أن هناك أي البق ، ولكن الأداء عندما خيوط في cPython سيء جدا (بالمقارنة مع غيرها من خيوط التنفيذ ، ولكن عادة ما تكون جيدة بما فيه الكفاية إذا كان كل معظم المواضيع هل هو كتلة) بسبب جيل (مترجم العالمي قفل) ، لذلك حقا هو تنفيذ محددة بدلا من لغة معينة.Jython ، على سبيل المثال ، لا يعانون من هذا بسبب استخدام جافا موضوع نموذج.

انظر هذا الرد على السبب في أنه ليس من الممكن إزالة جيل من cPython التنفيذ ، هذا لبعض العملية ووضع الحلول.

جولة سريعة على جوجل عن "الثعبان جيل" للحصول على مزيد من المعلومات.

إذا كنت تريد أن رمز الثعبان على الكبير خيوط الدعم ، قد ترغب في التحقق IronPython أو Jython.منذ كود بايثون في IronPython و Jython تشغيل على .NET CLR و Java VM على التوالي ، فإنها تتمتع العظيم خيوط الدعم بنيت في تلك المكتبات.بالإضافة إلى ذلك ، IronPython لا GIL, مشكلة تمنع CPython المواضيع من الاستفادة الكاملة من متعدد النواة أبنية.

أنا استخدامها في العديد من التطبيقات و قط ولا سمعت من خيوط كونها أي شيء آخر غير مضمونة 100% ، طالما كنت تعرف حدوده.لا يمكنك تفرخ 1000 المواضيع في نفس الوقت نتوقع برنامج لتشغيل بشكل صحيح على ويندوز ، ومع ذلك يمكنك كتابة بسهولة عامل حمام سباحة تغذية فقط 1000 العمليات و تبقي كل شيء جميل و تحت السيطرة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top