Python Flacon d'arrêt de gestionnaire d'événement
Je suis en utilisant le Flacon comme un point de terminaison REST qui ajoute la demande d'une application à une file d'attente. La file d'attente est ensuite consommée par un deuxième thread.
server.py
def get_application():
global app
app.debug = True
app.queue = client.Agent()
app.queue.start()
return app
@app.route("/api/v1/test/", methods=["POST"])
def test():
if request.method == "POST":
try:
#add the request parameters to queue
app.queue.add_to_queue(req)
except Exception:
return "All the parameters must be provided" , 400
return "", 200
return "Resource not found",404
client.py
class Agent(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.active = True
self.queue = Queue.Queue(0)
def run(self):
while self.active:
req = self.queue.get()
#do something
def add_to_queue(self,request):
self.queue.put(request)
Est-il un arrêt de gestionnaire d'événement dans le flacon afin que je puisse se fermer correctement le thread consommateur à chaque fois que le ballon est l'arrêt de l'application (par exemple, lorsque le service apache est redémarré)?
OriginalL'auteur Mark | 2015-06-09
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas d'application.stop (), si c'est ce que vous cherchez, cependant l'aide du module de
atexit
vous pouvez faire quelque chose de similaire:https://docs.python.org/2/library/atexit.html
Considérez ceci:
Également de noter-
atexit
ne sera pas appelé si vous avez la force de votre serveur à l'aide de Ctrl-C.Pour qu'il y est un autre module-
signal
.https://docs.python.org/2/library/signal.html
Tout ce temps-jamais de nouveau sur atexit, je suis dans votre dette.
OriginalL'auteur John