首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何停止运行gevent-socketio的Flask服务器

如何停止运行gevent-socketio的Flask服务器
EN

Stack Overflow用户
提问于 2013-04-11 01:15:13
回答 1查看 2.6K关注 0票数 0

我有一个运行gevent-socketio的flask应用程序,我是这样创建的:

代码语言:javascript
复制
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(),但这似乎没有改变任何事情

关闭服务器的正确方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-05 21:53:24

创建一个gevent.event.Event并等待它,而不是使用serve_forever()。要实际启动shutdown,请使用其set()方法触发事件:

代码语言:javascript
复制
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出口上获得堆栈跟踪。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15932298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档