سؤال

كيفية تشغيل وحدة نمطية معينة نظرًا لأنني أرغب في تشغيل بعض الوظائف بشكل متزامن والتي لا تستخدم بالضرورة التوجيه (يمكن أن تكون خدمات خفية) أثناء تشغيل خادم التطبيق في نفس الوقت؟

على سبيل المثال:

#some other route functions app.post(...)

#some other concurrent functions

def alarm():
    '''
    Run this service every X duration
    '''
    ALARM = 21 
    try:
        while 1:
            #checking time and doing something. Then finding INTERVAL
            gevent.sleep(INTERVAL)
    except KeyboardInterrupt,e:
        print 'exiting'

هل يجب علي استخدام ما سبق مثل هذا بعد ذلك رئيسي ?

gevent.joinall(gevent.spawn(alarm))

app.run(....)

أو

gevent.joinall((gevent.spawn(alarm),gevent.spawn(app.run)))

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

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

المحلول

يأتي Gevent مع خوادم WSGI الخاصة به، لذلك ليس من الضروري استخدامه حقًا app.run.الخوادم هي:

كلاهما يوفر نفس الواجهة.

يمكنك استخدام هذه لتحقيق ما تريد:

import gevent
import gevent.monkey
gevent.monkey.patch_all()

import requests

from gevent.pywsgi import WSGIServer


# app = YourBottleApp

def alarm():
    '''
    Run this service every X duration
    '''
    ALARM = 21 
    while 1:
        #checking time and doing something. Then finding INTERVAL
        gevent.sleep(INTERVAL)


if __name__ == '__main__':
    http_server = WSGIServer(('', 8080), app)
    srv_greenlet = gevent.spawn(http_server.serve_forever)
    alarm_greenlet = gevent.spawn(alarm)

    try:
        gevent.joinall([srv_greenlet, alarm_greenlet])
    except KeyboardInterrupt:
        http_server.stop()
        print 'Quitting'
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top