Question

Comment exécuter un module donné étant donné que je souhaite exécuter simultanément certaines fonctions qui n'utilisent pas nécessairement le routage (il peut s'agir de services démons) tout en exécutant le serveur d'applications ?

Par exemple:

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

Dois-je utiliser ce qui précède comme ceci après principal ?

gevent.joinall(gevent.spawn(alarm))

app.run(....)

ou

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

L'objectif est d'exécuter ces alarmes comme des services démons, de faire leur travail et de les répéter pendant que le reste des opérations de service fonctionne comme d'habitude.Le serveur devrait également démarrer simultanément.corrigez-moi si je ne suis pas sur la bonne voie.

Était-ce utile?

La solution

Gevent est livré avec ses propres serveurs WSGI, il n'est donc vraiment pas nécessaire d'utiliser app.run.Les serveurs sont :

Les deux offrent la même interface.

Vous pouvez les utiliser pour réaliser ce que vous voulez :

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'
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top