(Google App Engine Python 2.7)主线程上的webapp2 RequestHandler?

时间:2013-01-30 18:50:50

标签: multithreading google-app-engine webapp2 requesthandler

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

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

这是一个堆栈跟踪:

  

PyDevDebug [PyDev Google App Run]     dev_appserver.py
        MainThread - pid4276_seq4
            发表[test1.py:53]
            发送[webapp2.py:570]
            致电 [webapp2.py:1102]
            default_dispatcher [webapp2.py:1278]
            致电 [webapp2.py:1529]
            处理[wsgi.py:223]
            HandleRequest [wsgi.py:298]             HandleRequest [runtime.py:151]
            ExecutePy27Handler [dev_appserver.py:1525]
            ExecuteCGI [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]
            handle [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]
            handle_request [dev_appserver.py:3991]
            serve_forever [dev_appserver.py:4028]
            main [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]
        Thread-4 - pid4276_seq5     dev_appserver.py

1 个答案:

答案 0 :(得分:0)

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

有一个“实验性开发服务器”here,您刚刚提醒我:

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

  

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

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