Merge pull request #1752 from alviezhang/master

Fix #1728 make TornadoWorker compatible with Tornado 5.X
This commit is contained in:
Randall Leeds 2018-04-25 10:55:40 -07:00 committed by GitHub
commit ec9e885939
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

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,6 +73,10 @@ 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
if IOLOOP_PARAMETER_REMOVED:
PeriodicCallback(self.watchdog, 1000).start()
PeriodicCallback(self.heartbeat, 1000).start()
else:
PeriodicCallback(self.watchdog, 1000, io_loop=self.ioloop).start() PeriodicCallback(self.watchdog, 1000, io_loop=self.ioloop).start()
PeriodicCallback(self.heartbeat, 1000, io_loop=self.ioloop).start() PeriodicCallback(self.heartbeat, 1000, io_loop=self.ioloop).start()
@ -109,8 +119,14 @@ 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"]
if IOLOOP_PARAMETER_REMOVED:
server = server_class(app, ssl_options=_ssl_opt)
else:
server = server_class(app, io_loop=self.ioloop, server = server_class(app, io_loop=self.ioloop,
ssl_options=_ssl_opt) ssl_options=_ssl_opt)
else:
if IOLOOP_PARAMETER_REMOVED:
server = server_class(app)
else: else:
server = server_class(app, io_loop=self.ioloop) server = server_class(app, io_loop=self.ioloop)