Pregunta

Cómo ejecutar un módulo dado quiero ejecutar algunas funciones simultáneamente que no son necesariamente el uso de enrutamiento (podría ser el demonio de servicios), mientras que al mismo tiempo que ejecuta el servidor de aplicaciones?

Por ejemplo:

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

¿Tengo que usar la anterior como esta después de principal ?

gevent.joinall(gevent.spawn(alarm))

app.run(....)

o

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

El objetivo es ejecutar estas alarma como demonio de los servicios, hacen su trabajo y pausa mientras que el resto de las operaciones de servicio de trabajo como de costumbre.El servidor debe comenzar simultáneamente así.me corrija si no estoy en el camino correcto.

¿Fue útil?

Solución

Gevent viene con sus propios WSGI servidores, por lo que no es realmente necesario el uso de app.run.Los servidores son:

Ambos proporcionan la misma interfaz.

Usted puede utilizar estas para lograr lo que quieres:

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'
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top