سؤال

لديّ برنامج نصي في Python يستخدم موردًا لا يمكن استخدامه بواسطة أكثر من كمية معينة من البرامج النصية المتزامنة التي تعمل.

من الناحية الكلاسيكية ، سيتم حل هذا من خلال semaphores المسماة ولكن لا يمكنني العثور على تلك الموجودة في وثائق المعالجة متعددة وحدة أو الخيوط .

هل أفتقد شيئًا ما أم يدعى Semaphores لم يتم تنفيذه / المكشوف من قبل Python؟ والأهم من ذلك ، إذا كانت الإجابة لا ، فما هي أفضل طريقة لمحاكاة واحدة؟

شكرا ، بوعز

ملاحظة. لأسباب غير وثيقة الصلة بهذا السؤال ، لا يمكنني تجميع المهمة إلى عملية/خفيون بشكل مستمر أو العمل مع العمليات المفروضة - وكلاهما ، على ما يبدو ، كان سيعمل مع Python API.

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

المحلول

أقترح امتداد طرف ثالث مثل هؤلاء, ، من الناحية المثالية posix_ipc واحد - انظر على وجه الخصوص سيمبهور قسم في المستندات.

تدور هذه الوحدات في الغالب حول تعريض "System V IPC" (بما في ذلك الإشارات) بطريقة Unixy ، ولكن على الأقل واحد منها (posix_ipc على وجه التحديد) يُزعم أنه يعمل مع Cygwin على Windows (لم أتحقق من هذا المطالبة). هناك بعض التوثيق محددات على FreeBSD 7.2 و Mac OSX 10.5 ، لذا احرص على الاعتبار إذا كانت هذه المنصات مهمة بالنسبة لك.

نصائح أخرى

يمكنك محاكاةها باستخدام نظام الملفات بدلاً من مسار kernel (يتم تنفيذ Semaphores المسمى بهذه الطريقة على بعض المنصات على أي حال). عليك التنفيذ sem_[open|wait|post|unlink] نفسك ، ولكن يجب أن يكون تافها نسبيا للقيام بذلك. قد يكون النفقات العامة الخاصة بك المزامنة مهمة (اعتمادًا على عدد المرات التي لديك في التغلب على الإشارة في تطبيقك) ، لذلك قد ترغب في تهيئة RamDisk عند تشغيل العملية التي لتخزين Semaphores المسمى.

بدلاً من ذلك ، إذا لم تكن مرتاحًا لتلحيل ملفك الخاص ، فيمكنك الالتفاف على الأرجح boost::interprocess::named_semaphore (مستندات هنا) في وحدة تمديد بسيطة.

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