我有一个运行gevent-socketio的flask应用程序,我是这样创建的:
server = SocketIOServer(('localhost', 2345), app, resource='socket.io')
gevent.spawn(send_queued_messages_loop, server)
server.serve_forever()我在一个gevent线程中启动了send_queued_messages_loop,该线程在gevent.Queue上保持轮询,我的程序在这里存储数据,以便将数据发送到连接到socket.io的客户机
我尝试了不同的方法来停止服务器(例如使用sys.exit),或者从socket.io处理程序(当客户端发送socket.io消息时)或者从正常的路由(当客户端向/shutdown发出请求时),但是在任何情况下,sys.exit似乎都会因为greenlets的存在而失败。
我尝试先调用gevent.shutdown(),但这似乎没有改变任何事情
关闭服务器的正确方法是什么?
发布于 2013-05-05 21:53:24
创建一个gevent.event.Event并等待它,而不是使用serve_forever()。要实际启动shutdown,请使用其set()方法触发事件:
from gevent.event import Event
stopper = Event()
server = SocketIOServer(('localhost', 2345), app, resource='socket.io')
server.start()
gevent.spawn(send_queued_messages_loop)
try:
stopper.wait()
except KeyboardInterrupt:
print无论您现在想从哪里终止您的进程-所有您需要做的就是调用stopper.set()。
try..except实际上并不是必需的,但我不希望在一个干净的CTRL-C出口上获得堆栈跟踪。
https://stackoverflow.com/questions/15932298
复制相似问题