Frage

Wie führe ich ein bestimmtes Modul aus, wenn ich einige Funktionen gleichzeitig ausführen möchte, die nicht unbedingt Routing verwenden (könnte Daemon-Dienste sein), während gleichzeitig der App-Server ausgeführt wird?

Zum Beispiel:

#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'

Muss ich das oben Genannte danach so verwenden? hauptsächlich ?

gevent.joinall(gevent.spawn(alarm))

app.run(....)

oder

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

Das Ziel besteht darin, diese Alarmdienste wie Daemon-Dienste auszuführen, ihre Arbeit zu erledigen und in den Ruhezustand zu versetzen, während der Rest der Dienstvorgänge wie gewohnt abläuft.Gleichzeitig sollte auch der Server starten.Korrigiert mich, wenn ich nicht auf dem richtigen Weg bin.

War es hilfreich?

Lösung

Gevent verfügt über eigene WSGI-Server, sodass deren Verwendung eigentlich nicht erforderlich ist app.run.Die Server sind:

Beide stellen die gleiche Schnittstelle bereit.

Mit diesen können Sie erreichen, was Sie wollen:

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'
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top