make TornadoWorker compatible with Tornado 5.X

This commit is contained in:
alvie 2018-04-23 16:52:09 +08:00
parent 54e3b05e33
commit d55d5713a5

View File

@ -8,9 +8,10 @@ import os
import sys import sys
try: try:
import tornado.web import tornado
except ImportError: except ImportError:
raise RuntimeError("You need tornado installed to use this worker.") raise RuntimeError("You need tornado installed to use this worker.")
import tornado.web
import tornado.httpserver import tornado.httpserver
from tornado.ioloop import IOLoop, PeriodicCallback from tornado.ioloop import IOLoop, PeriodicCallback
from tornado.wsgi import WSGIContainer from tornado.wsgi import WSGIContainer
@ -18,6 +19,11 @@ from gunicorn.workers.base import Worker
from gunicorn import __version__ as gversion from gunicorn import __version__ as gversion
# `io_loop` arguments to many Tornado functions have been removed in Tornado 5.0
# <http://www.tornadoweb.org/en/stable/releases/v5.0.0.html#backwards-compatibility-notes>
IOLOOP_PARAMETER_REMOVED = tornado.version_info >= (5, 0, 0)
class TornadoWorker(Worker): class TornadoWorker(Worker):
@classmethod @classmethod
@ -67,8 +73,12 @@ class TornadoWorker(Worker):
self.ioloop = IOLoop.instance() self.ioloop = IOLoop.instance()
self.alive = True self.alive = True
self.server_alive = False self.server_alive = False
PeriodicCallback(self.watchdog, 1000, io_loop=self.ioloop).start() if IOLOOP_PARAMETER_REMOVED:
PeriodicCallback(self.heartbeat, 1000, io_loop=self.ioloop).start() PeriodicCallback(self.watchdog, 1000).start()
PeriodicCallback(self.heartbeat, 1000).start()
else:
PeriodicCallback(self.watchdog, 1000, io_loop=self.ioloop).start()
PeriodicCallback(self.heartbeat, 1000, io_loop=self.ioloop).start()
# Assume the app is a WSGI callable if its not an # Assume the app is a WSGI callable if its not an
# instance of tornado.web.Application or is an # instance of tornado.web.Application or is an
@ -109,10 +119,16 @@ class TornadoWorker(Worker):
# options # options
del _ssl_opt["do_handshake_on_connect"] del _ssl_opt["do_handshake_on_connect"]
del _ssl_opt["suppress_ragged_eofs"] del _ssl_opt["suppress_ragged_eofs"]
server = server_class(app, io_loop=self.ioloop, if IOLOOP_PARAMETER_REMOVED:
ssl_options=_ssl_opt) server = server_class(app, ssl_options=_ssl_opt)
else:
server = server_class(app, io_loop=self.ioloop,
ssl_options=_ssl_opt)
else: else:
server = server_class(app, io_loop=self.ioloop) if IOLOOP_PARAMETER_REMOVED:
server = server_class(app)
else:
server = server_class(app, io_loop=self.ioloop)
self.server = server self.server = server
self.server_alive = True self.server_alive = True