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,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