4

gevent WSGI ベースのサーバーを正常にシャットダウンする唯一の方法 (gevent のソースの検索と検査から) は次のとおりです。

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 が自然に終了するのを待つことです。たとえば、まだリクエストを処理している場合、適切に完了することができます。

問題は、上記の一見正しいコードでは、サーバーが実際に max を待機することです。60 秒以内ですが、すべての TCP 接続は を受信するとすぐに終了しますSIGTERM。ただし、Greenlet は終了するかタイムアウトが発生するまで、以前と同じこと (たとえば、スリープ状態) を続けます。

何か案は?

4

3 に答える 3