سؤال

من بيبوبسوب:

يوفر Pypubsub طريقة بسيطة لتطبيق Python الخاص بك لفصل مكوناته:يمكن أن تنشر أجزاء من التطبيق الرسائل (مع أو بدون بيانات) ويمكن لقطع الغيار الاشتراك/استلامها.هذا يسمح للرسالة "مرسلي" ورسالة "مستمعين" أن يكونوا غير مدركين لبعضهم البعض:

  • لا يحتاج أحدهما إلى استيراد الآخر
  • المرسل لا يحتاج إلى أن يعرف
    • "من" يحصل على الرسائل،
    • ماذا سيفعل المستمعون بالبيانات،
    • أو حتى إذا كان أي مستمع سيحصل على بيانات الرسالة.
  • وبالمثل، لا يحتاج المستمعون إلى القلق بشأن مصدر الرسائل.

هذه أداة رائعة لتنفيذ بنية التحكم في عرض النموذج أو أي بنية مماثلة تعزز فصل مكوناته.

يبدو أن هناك عددًا لا بأس به من وحدات Python للنشر/الاشتراك العائمة حول الويب، من PyPubSub إلى باي ديسباتشير إلى فصول بسيطة "مطبوخة في المنزل".

هل هناك مزايا وعيوب محددة عند مقارنة الوحدات المختلفة؟ما هي مجموعات الوحدات التي تم قياسها ومقارنتها؟

شكرا لك مقدما

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

المحلول

باي ديسباتشير يستخدم بكثرة في جانغو وهو يعمل بشكل مثالي بالنسبة لي (وللمجتمع جانغو بأكمله، على ما أعتقد).

على ما أذكر، هناك بعض المشكلات في الأداء:

  • التحقق من الوسيطات بواسطة PyDispatcher بطيء.
  • الاتصالات غير المستخدمة لها حمل غير ضروري.

AFAIK من غير المرجح أن تواجه هذه المشكلات في تطبيق صغير إلى متوسط ​​الحجم.لذا فإن هذه القضايا قد لا تهمك.إذا كنت تعتقد أنك بحاجة إلى كل رطل من الأداء (التحسين المبكر هو أصل كل الشرور!)، فيمكنك الاطلاع على التعديلات التي تم إجراؤها على PyDispatcher في Django.

أتمنى أن يساعدك هذا.

نصائح أخرى

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

يحرر: لقد تشعبت هذا المشروع إلى مشروع إشارة مستقلة لبيثون.

لقد نظرت مؤخرا بعناية في py-amqplib للعمل كعميل AMQP لوسيط RabbitMQ.الأداة الأخيرة مكتوبة بلغة Erlang.

إذا كنت تتطلع إلى فصل تطبيقك.فلماذا ربطها باللغة نفسها؟فكر في استخدام قوائم انتظار الرسائل التي تكون محايدة للغة، ومن ثم يكون لديك مساحة للنمو!

ومع ذلك، يتطلب AMQP جهدًا لفهمه وقد يكون أكثر مما ترغب في تحمله إذا كان تطبيقك.يعمل بشكل جيد كما هو.YMMV.

هنا أحدث واحد: https://github.com/shaunduncan/smokesignal. "Smokesignal هي مكتبة بايثون بسيطة لإرسال واستقبال الإشارات.إنه يستمد بعض الإلهام من إطار عمل إشارة Django ولكن المقصود منه أن يكون متغيرًا للأغراض العامة." مثال:

from time import sleep
import smokesignal

@smokesignal.on('debug')
def verbose(val):
    print "#", val


def main():
    for i in range(100):
        if i and i%10==0:
            smokesignal.emit('debug', i)
        sleep(.1)

main()

بعض المكتبات التي وجدتها لم يتم ذكرها بعد:

هناك أيضًا مكتبات PJ Eby وRuleDispatch ومشروع PEAK، وخاصة Trellis.لا أعرف ما هي حالتهم فعليًا ولكن القائمة البريدية نشطة تمامًا.

الإصدار الأخير من Trellis على PyPi

وثيقة تعريشة

لقد استخدمت أيضًا المكونات من مشروع كاميليا من بي بي سي.يعد Axon أسلوبًا مثيرًا للاهتمام، ولكنه أكثر مكونًا من إلهام الناشر والمستهلك.حسنًا، موقع الويب الخاص به ليس محدثًا إلى حد ما على الإطلاق ...كان هناك مشروع أو 2 في Google SoC 2008 ويجري العمل عليه.

لا أعرف إذا كان يساعد :)

يحرر :لقد وجدت إخطار py وهو تطبيق "غير تقليدي" لنمط المراقب.يحتوي على معظم الوظائف التي أحتاجها لأدواتي الخاصة.

الحقيقة وحدها هي أن PyPubSub يبدو أنه مشروع تتم إدارته بشكل فوضوي إلى حد ما (موقع Wiki على SF ميت، والموقع الإلكتروني (ويكي آخر) المرتبط بـ SF معطل حاليًا) سيكون سببًا كافيًا لعدم استخدامه.لدى PyDispatcher موقع ويب سليم، ولكن يبدو أن الوثائق الوحيدة التي يبدو أنها توفرها هي تلك الخاصة بواجهة برمجة التطبيقات (API) التي تم إنشاؤها من سلاسل المستندات.لا توجد حركة مرور على القائمة البريدية أيضًا ...علامة سيئة!

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

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

يبدو أن كلاهما مشروعان ناضجان بشكل معقول، على الأقل من حيث التوثيق والمجتمع.لا يمكنني التعليق على جودة البرنامج، على الرغم من أنني، كما قلت، لم أستخدم أيًا من البرامج.

يأتي Qpid مع مكتبات عملاء لـ Python، ولكن يمكنك أيضًا استخدامه py-amqplib.بالنسبة لـ ActiveMQ هناك pyactivemq, ، والذي يمكنك استخدامه للاتصال إما عبر STOMP (بروتوكول الرسائل المتدفقة النصية) أو عبر Openwire.

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