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, например:

  • генерировать 3 разных случайных числа
  • python получает клавиши со стрелками из командной строки
  • Питон не работает
  • python: замените double \\ в пути с помощью одного \
  • Скомпилируйте основную программу Python с помощью Cython
  • Что означает знак процента в Python 3.1
  •  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, когда приложение по умолчанию не работает?

  • Получить значение аргумента функции?
  • Как удалить все escape-последовательности из списка строк?
  • на месте сортировка возвращает Нет для пустого списка
  • Какая лучшая быстрочитаемая книга Python?
  • Один лайнер, чтобы определить, являются ли значения словаря пустыми списками или нет
  • из . импорт XXXX
  • 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()))

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