【发布时间】:2013-08-19 01:55:53
【问题描述】:
我知道(通过搜索和检查 gevent 的源)正常关闭基于 gevent WSGI 的服务器的唯一方法是:
server = gevent.wsgi.WSGIServer(('', 80), someWSGIApp)
def shutdown():
print('Shutting down ...')
server.stop(timeout=60)
exit(signal.SIGTERM)
gevent.signal(signal.SIGTERM, shutdown)
server.serve_forever()
现在,我所说的 graceful 的意思是等待所有 greenlet 自行终止。因此,例如,如果他们仍在处理请求,他们可以正确地完成它们。
问题是,使用上述看似正确的代码,服务器确实在等待最大值。 60 秒,但所有 TCP 连接在收到SIGTERM 后立即终止。然而,Greenlets 会继续做他们原来的事情(例如睡觉),直到他们完成或超时。
有什么想法吗?
【问题讨论】:
-
你找到方法了吗?