سؤال

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

أنا أبحث عن النهج العام تغيير هذا التطبيق حتى استطيع التواصل معها في حين انها تعمل.في الغالب أود أن تكون قادرة على مراقبة الصحة.

باختصار أود أن تكون قادرة على القيام بشيء من هذا القبيل:

python application.py start  # launches the daemon

في وقت لاحق, أود أن تكون قادرة على أن تأتي على طول تفعل شيئا مثل:

python application.py check_queue_size  # return info from the daemonized process

أن تكون واضحة, ليس لدي أي مشكلة في تنفيذ جانغو مستوحاة من بناء الجملة.ما لم يكن لديك أي فكرة عن كيفية القيام به هو إرسال إشارات إلى daemonized عملية (ابدأ) أو كيفية كتابة شيطان للتعامل مع الرد على مثل هذه الإشارات.

كما قلت أعلاه, أنا أبحث عن النهج العام.الوحيد الذي يمكنني رؤيته الآن هو قول شيطان باستمرار تسجيل كل شيء التي قد تكون هناك حاجة إلى ملف ، ولكن أتمنى أن يكون هناك أقل فوضوي طريقة للذهاب حول هذا الموضوع.

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

شكرا مرة أخرى.

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

المحلول

ماذا عن بعد ذلك تشغيل ملقم http?

يبدو الأمر جنونيا لكن تشغيل ملقم ويب بسيط عن إدارة الخاص بك يتطلب الخادم فقط بضعة أسطر باستخدام web.py

يمكنك أن تنظر أيضا في إنشاء unix الأنابيب.

نصائح أخرى

نهج آخر:استخدام بايرو (الثعبان عن الكائنات).

بايرو في الأساس يسمح لك بنشر الثعبان مثيلات الكائن الخدمات التي يمكن استدعاؤها عن بعد.لقد استخدمت بايرو عن الهدف المحدد لك أن تصف ، ووجدت أنها تعمل بشكل جيد جدا.

بشكل افتراضي ، بايرو خادم الشيطان يقبل الاتصالات من كل مكان.للحد من هذه استخدام اتصال مدقق (راجع وثائق) أو العرض host='127.0.0.1' إلى Daemon منشئ فقط الاستماع الاتصالات المحلية.

رمز المثال مأخوذ من بايرو الوثائق:

الخادم

import Pyro.core

class JokeGen(Pyro.core.ObjBase):
        def __init__(self):
                Pyro.core.ObjBase.__init__(self)
        def joke(self, name):
                return "Sorry "+name+", I don't know any jokes."

Pyro.core.initServer()
daemon=Pyro.core.Daemon()
uri=daemon.connect(JokeGen(),"jokegen")

print "The daemon runs on port:",daemon.port
print "The object's uri is:",uri

daemon.requestLoop()

العميل

import Pyro.core

# you have to change the URI below to match your own host/port.
jokes = Pyro.core.getProxyForURI("PYROLOC://localhost:7766/jokegen")

print jokes.joke("Irmen")

آخر مماثل المشروع RPyC.لم أحاول RPyC.

استخدام werkzeug وجعل الشيطان تشمل HTTP القائم على WSGI الخادم.

الخاص بك شيطان لديه مجموعة صغيرة WSGI تطبيقات الاستجابة مع مركز المعلومات.

العميل الخاص بك ببساطة يستخدم urllib2 لجعل وظيفة أو الحصول على طلبات localhost:somePort.العميل والملقم يجب أن نتفق على رقم المنفذ (و عنوان URL).

هذا هو بسيط جدا لتنفيذ جدا وقابلة للتطوير.إضافة أوامر جديدة هو عملية هينة.

لاحظ أن الشيطان لا يكون الرد في HTML (التي غالبا ما تكون بسيطة ، على الرغم من).لدينا الشياطين الاستجابة WSGI-الطلبات مع JSON-ترميز وضع الكائنات.

وأود أن استخدام الملتوية مع المسمى أو مجرد فتح مأخذ توصيل.نلقي نظرة على صدى الخادم و العميل أمثلة.كنت بحاجة إلى تعديل صدى server للتحقق من بعض سلسلة مرت من قبل العميل ومن ثم الاستجابة مع كل المعلومات المطلوبة.

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

# your server

from twisted.web import xmlrpc, server
from twisted.internet import reactor

class MyServer(xmlrpc.XMLRPC):

    def xmlrpc_monitor(self, params):        
        return server_related_info

if __name__ == '__main__':
    r = MyServer()
    reactor.listenTCP(8080, Server.Site(r))
    reactor.run()

العميل يمكن أن تكون مكتوبة باستخدام xmlrpclib ، تحقق من رمز المثال هنا.

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

هل يمكن ربطه مع بايرو (http://pythonhosted.org/Pyro4/) الثعبان كائن بعيد.فإنه يتيح لك الوصول عن بعد بيثون الكائنات.سيكون من السهل أن تنفذ ، وانخفاض النفقات العامة ، و ليس كما الغازية كما الملتوية.

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