tornado.wsgi.WSGIApplication issue: __call__ принимает ровно 3 аргумента (2 данных)

В рамках проекта я пытался подключить сервер Tornado для работы с Google App Engine. Поскольку App Engine не реализует асинхронные функции обычного Tornado, я пытаюсь преобразовать основное приложение в WSGIApplication. Нормальный основной код работает отлично (простить импорт и форматирование, из-за попыток следовать другим примерам бесполезно):

import wsgiref import tornado.wsgi import tornado.web import tornado.httpserver import os import Handlers from tornado.options import define, options define("port", default=8000, help="run on the given port", type=int) def application(): handlers=[(r"/", Handlers.MainHandler), (r"/Login", Handlers.LoginHandler), (r"/ViewHistory",Handlers.ViewHistoryHandler), (r"/UploadFile", Handlers.UploadHandler), (r"/Index", Handlers.IndexHandler), (r"/About", Handlers.AboutHandler), (r"/Profile", Handlers.ProfileHandler)] settings=dict(template_path=os.path.join(os.path.dirname(__file__), "templates"), static_path=os.path.join(os.path.dirname(__file__), "static"), debug=True) return tornado.web.Application(handlers, **settings) def main(): tornado.options.parse_command_line() http_server = tornado.httpserver.HTTPServer(application()) http_server.listen(options.port) tornado.ioloop.IOLoop.instance().start() if __name__ == "__main__": main() 

Я могу получить доступ к веб-страницам, просматривать сайт, отлично работать. Если я изменю строку 24, чтобы вернуть tornado.wsgi.WSGIApplication, например:

 import wsgiref import tornado.wsgi import tornado.web import tornado.httpserver import os import Handlers from tornado.options import define, options define("port", default=8000, help="run on the given port", type=int) def application(): handlers=[(r"/", Handlers.MainHandler), (r"/Login", Handlers.LoginHandler), (r"/ViewHistory",Handlers.ViewHistoryHandler), (r"/UploadFile", Handlers.UploadHandler), (r"/Index", Handlers.IndexHandler), (r"/About", Handlers.AboutHandler), (r"/Profile", Handlers.ProfileHandler)] settings=dict(template_path=os.path.join(os.path.dirname(__file__), "templates"), static_path=os.path.join(os.path.dirname(__file__), "static"), debug=True) return tornado.wsgi.WSGIApplication(handlers, **settings) def main(): tornado.options.parse_command_line() http_server = tornado.httpserver.HTTPServer(application()) http_server.listen(options.port) tornado.ioloop.IOLoop.instance().start() if __name__ == "__main__": main() 

он также работает просто отлично. Однако, когда я пытаюсь получить доступ к любой из веб-страниц, это дает мне следующую ошибку:

 [E 140131 10:02:18 iostream:357] Uncaught exception, closing connection. Traceback (most recent call last): File "/usr/local/lib/python2.7/dist-packages/tornado-3.2-py2.7-linux-x86_64.egg/tornado/iostream.py", line 354, in wrapper callback(*args) File "/usr/local/lib/python2.7/dist-packages/tornado-3.2-py2.7-linux-x86_64.egg/tornado/stack_context.py", line 331, in wrapped raise_exc_info(exc) File "/usr/local/lib/python2.7/dist-packages/tornado-3.2-py2.7-linux-x86_64.egg/tornado/stack_context.py", line 302, in wrapped ret = fn(*args, **kwargs) File "/usr/local/lib/python2.7/dist-packages/tornado-3.2-py2.7-linux-x86_64.egg/tornado/httpserver.py", line 328, in _on_headers self.request_callback(self._request) TypeError: __call__() takes exactly 3 arguments (2 given) [E 140131 10:02:18 ioloop:491] Exception in callback <functools.partial object at 0xf6e3ecfc> Traceback (most recent call last): File "/usr/local/lib/python2.7/dist-packages/tornado-3.2-py2.7-linux-x86_64.egg/tornado/ioloop.py", line 477, in _run_callback callback() File "/usr/local/lib/python2.7/dist-packages/tornado-3.2-py2.7-linux-x86_64.egg/tornado/stack_context.py", line 331, in wrapped raise_exc_info(exc) File "/usr/local/lib/python2.7/dist-packages/tornado-3.2-py2.7-linux-x86_64.egg/tornado/stack_context.py", line 302, in wrapped ret = fn(*args, **kwargs) File "/usr/local/lib/python2.7/dist-packages/tornado-3.2-py2.7-linux-x86_64.egg/tornado/iostream.py", line 354, in wrapper callback(*args) File "/usr/local/lib/python2.7/dist-packages/tornado-3.2-py2.7-linux-x86_64.egg/tornado/stack_context.py", line 331, in wrapped raise_exc_info(exc) File "/usr/local/lib/python2.7/dist-packages/tornado-3.2-py2.7-linux-x86_64.egg/tornado/stack_context.py", line 302, in wrapped ret = fn(*args, **kwargs) File "/usr/local/lib/python2.7/dist-packages/tornado-3.2-py2.7-linux-x86_64.egg/tornado/httpserver.py", line 328, in _on_headers self.request_callback(self._request) TypeError: __call__() takes exactly 3 arguments (2 given) 

Который я не могу сделать головы или хвосты, и Google не привлек кого-либо с той же проблемой (за исключением парня, который рекомендовал обманывать файлы Tornado, что не поможет в App Engine AFAIK). Кто-нибудь еще видел эту ошибку раньше или может определить причину сбоя WSGIApplication, когда приложение по умолчанию не работает?

  • Flask hello world использует apache и mod_wsgi показывает файлы только в веб-канале
  • Как обслуживать данные из потока UDP через HTTP в Python?
  • Передача информации об аутентификации apache2 в скрипт wsgi, выполняемый mod_wsgi
  • Каковы ограничения подключения для Google Cloud SQL от App Engine и как лучше всего использовать соединения с БД?
  • Объект WSGIRequest не имеет атрибута «пользователь» Django admin
  • Привет, мир в mod_wsgi
  • Потоковая передача файлов WSGI с помощью генератора
  • используя Flask и Tornado вместе?
  • One Solution collect form web for “tornado.wsgi.WSGIApplication issue: __call__ принимает ровно 3 аргумента (2 данных)”

    Название «приложение», к сожалению, перегружено здесь – tornado.web.Application и WSGIApplication отличаются своим интерфейсом к серверу. tornado.web.Application может использоваться Tornado HTTPServer, но WSGIApplication должен запускаться в контейнере WSGI. В развертывании движка приложения вы просто укажете свой экземпляр WSGIApplication непосредственно в файле конфигурации без упоминания tornado.httpserver. Чтобы использовать адаптацию WSGIApplication к tornado.httpserver, используйте tornado.wsgi.WSGIContainer: HTTPServer(WSGIContainer(application()))

    Interesting Posts

    Импортирование matplotlib.pyplot и BeautifulSoup с помощью cxFreeze

    Ошибка Python 3.1 и Sublime Text 2

    Строковый модуль python vs str

    Как я могу заставить Черепаха узнать круг?

    В чем разница между pandas.qcut и pandas.cut?

    Сохранение графиков (AxesSubPlot), созданных из python pandas, с помощью savefig от matplotlib

    Обновление XML-элементов и значений атрибутов с использованием Python etree

    Ошибка травления при выполнении команды COPY: CQLShell в Windows

    Объект AttributeError: '_socketobject' не имеет атрибута 'set_tlsext_host_name'

    значения активации для всех узлов в сети PyBrain

    В чем разница между функцией, несвязанным методом и связанным методом?

    json.dump throwing "TypeError: {…} не является сериализуемым JSON" на, казалось бы, действительном объекте?

    Установка functools дает мне объект AttributeError 'module' не имеет атрибута 'compose'

    Как создать функцию, которая подсчитывает, сколько раз каждый элемент равен 2 элементам справа

    IOError: Недопустимый аргумент при чтении / записи большого байта

    Python - лучший язык программирования в мире.