【问题标题】:(Google App Engine Python 2.7) webapp2 RequestHandler on main thread?(Google App Engine Python 2.7)主线程上的 webapp2 RequestHandler?
【发布时间】:2013-01-30 18:50:50
【问题描述】:

我从一个简单的Python 2.5 应用引擎 应用开始,然后将其迁移到Python 2.7,希望利用它的多线程能力。迁移后,我注意到webapp2.RequestHandler 实例都是从主线程 调用的。

我有一个AJAX 客户端启动多个异步请求。我只想在服务器端发生某些事件时才响应的请求之一。假设事件现在休眠 10 秒。问题是睡眠发生在 主线程 中,并在处理来自AJAX 的第二个 ASYNC 请求之前占用了线程。我错过了什么?

这是一个堆栈跟踪:

PyDevDebug [PyDev Google 应用运行] dev_appserver.py
主线程 - pid4276_seq4
发布 [test1.py:53]
调度 [webapp2.py:570]
调用 [webapp2.py:1102]
default_dispatcher [webapp2.py:1278]
调用 [webapp2.py:1529]
处理 [wsgi.py:223]
处理请求 [wsgi.py:298] HandleRequest [runtime.py:151]
ExecutePy27Handler [dev_appserver.py:1525]
执行CGI [dev_appserver.py:1701]
调度 [dev_appserver.py:1803]
调度 [dev_appserver.py:719] _Dispatch [dev_appserver.py:2870]
_HandleRequest [dev_appserver.py:3001]
do_POST [dev_appserver.py:2794] handle_one_request [BaseHTTPServer.py:328]
处理 [BaseHTTPServer.py:340]
init [SocketServer.py:638]
init [dev_appserver.py:2780]
finish_request [SocketServer.py:323]
process_request [SocketServer.py:310]
_handle_request_noblock [SocketServer.py:284]
处理请求 [dev_appserver.py:3991]
serve_forever [dev_appserver.py:4028]
主 [dev_appserver_main.py:721]
[dev_appserver_main.py:747]
run_file [dev_appserver.py:167] [dev_appserver.py:171] 运行 [pydevd.py:1090]
[pydevd.py:1397]
线程 4 - pid4276_seq5 dev_appserver.py

【问题讨论】:

  • 您是部署的还是本地的?如果是本地的,请在部署时尝试。本地线程往往不是多线程的。
  • 就是这样!我花了几个小时试图找出它为什么不起作用,并按原样部署它,它起作用了!谢谢!知道为什么它不能在本地工作或如何使它工作吗?如果行为不正确,很难在本地开发
  • 很多东西不能在本地工作,或者说不能工作,因为它们在部署时会表现出来。好吧,实际上并没有那么多事情,但是如果您要做的是其中之一(我花了很多时间在某个时间点解决后端无济于事,它在部署时“正常工作”),直到您意识到这才是痛苦的。一般来说,假设并行活动将在本地串行模拟。我已经习惯了在“半直播、半本地”的环境中工作,其中有 很多 的调试日志记录。
  • 知道了,知道那时我不能依赖它非常有用。部署时我必须想出一个调试策略:)顺便说一句,我不知道如何接受您的原始答案。
  • 我已经添加了更多作为实际答案而不是现在的评论。

标签: multithreading google-app-engine webapp2 requesthandler


【解决方案1】:

似乎在开发(本地)服务器中并行线程不是并行执行,而是串行执行。

你让我想起了一个“实验性开发服务器”here

Google App Engine 的实验性新开发服务器。

多线程服务可为复杂的应用程序提供更好的性能和更正确的语义,例如通过 urlfetch 访问您自己的应用程序不再死锁。

这可能会在本地解决它,但我没有亲自尝试过。

【讨论】:

    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 2012-11-17
    • 2018-04-29
    • 1970-01-01
    • 2013-10-28
    相关资源
    最近更新 更多