Pergunta

Como executar um determinado módulo de dado que deseja executar algumas funções em simultâneo, que não são necessariamente usando o roteamento (poderia ser daemon de serviços) ao mesmo tempo, executando o servidor de aplicativos?

Por exemplo:

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

Eu tenho que usar o acima como esta depois principal ?

gevent.joinall(gevent.spawn(alarm))

app.run(....)

ou

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

O objetivo é executar estas alarme como daemons de serviço, fazer o seu trabalho e soneca enquanto o resto do serviço de operações de trabalhar como de costume.O servidor deve iniciar-se concomitantemente bem.corrija-me se não estou no caminho certo.

Foi útil?

Solução

Gevent vem com sua própria WSGI servidores, por isso não é realmente necessário o uso de app.run.Os servidores são:

Ambos fornecem a mesma interface.

Você pode usá-los para conseguir o que deseja:

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top