如何解决tornado.wsgi中的“ TypeError:__call __()接受2个位置参数,但给了3个”?

时间:2019-08-10 15:47:28

标签: tornado wsgi python-3.7

我正在尝试使用wsgi格式龙卷风,因为服务器仅接受wsgi。

我尝试了龙卷风+ wsgi的所有服务器变体,总是收到此错误:__call__() takes 2 positional arguments but 3 were given

# app/__init__.py

import tornado.wsgi
import tornado.web
import wsgiref.simple_server


class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.render("templates/index.html")

def routes():
    return [
    (r"/", MainHandler),
]

class Application(tornado.wsgi.WSGIContainer):
    def __init__(self):
        handlers = routes()

        tornado.wsgi.WSGIContainer.__init__(self, handlers)

# wsgi.py 

import wsgiref.simple_server
from app import Application

application = Application()
server = wsgiref.simple_server.make_server('', 8888, Application())
server.serve_forever()

这是错误跟踪:

Traceback (most recent call last):
  File "/usr/local/Cellar/python/3.7.4/Frameworks/Python.framework/Versions/3.7/lib/python3.7/wsgiref/handlers.py", line 137, in run
    self.result = application(self.environ, self.start_response)
TypeError: __call__() takes 2 positional arguments but 3 were given
127.0.0.1 - - [10/Aug/2019 17:40:58] "GET / HTTP/1.1" 500 59

我希望工作tornado.wsgi,任何帮助都会有用!

1 个答案:

答案 0 :(得分:0)

WSGIContainer朝另一个方向发展:它使您可以在Tornado的HTTP服务器上运行wsgi应用程序,而不是在WSGI服务器上运行龙卷风应用程序。

在Tornado 5.1中,您可以使用WSGIAdapter执行此操作。在Tornado 6.0中,WSGIAdapter消失了,不再有任何方法可以在WSGI服务器上运行Tornado应用程序。您必须使用Tornado的服务器。