我知道(通过搜索和检查 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()
现在,我所说的优雅的意思是等待所有的greenlet自行终止。因此,例如,如果他们仍在处理请求,他们可以正确完成它们。
问题是,使用上面看似正确的代码,服务器确实在等待最大值。60 秒,但所有 TCP 连接在收到SIGTERM
. 然而,Greenlets 会继续做他们原来的事情(例如睡觉),直到他们完成或发生超时。
有任何想法吗?