如何为WebApp2添加多线程支持?
我正在使用 Python 2.7 和 WebApp2,刚接触这两个东西。我是在 App Engine 之外运行 WebApp2,并且正在按照官方教程进行学习。
提供的 HelloWorld 示例使用了 Paste 网络服务器,运行得很好。但是如果我这样修改它(加了一些睡眠时间):
import webapp2
class HelloWebapp2(webapp2.RequestHandler):
def get(self):
import time
time.sleep(6)
self.response.write('Hello, webapp2!')
app = webapp2.WSGIApplication([
('/', HelloWebapp2),
], debug=True)
def main():
from paste import httpserver
httpserver.serve(app, host='127.0.0.1', port='8080', use_threadpool=True)
if __name__ == '__main__':
main()
然后同时打开几个标签页,就明显感觉到这个 HelloWorld 是在一个线程里运行的。我加上 use_threadpool=True 只是为了显示更多信息,按照我从 Paste 文档中了解到的,它应该即使没有线程池也会使用多线程。
我试着在网上查找,但不幸的是,我得到的结果是“当 webapp2_extras.local 模块可用时,webapp2 是线程安全的”。这对我一点帮助都没有。
请教我如何修改这个 HelloWorld 以异步方式处理请求吧!
附带问题:如果我使用 Go 语言,能否直接在每个处理程序中运行 goroutine 来实现基本的并发?还是说 goroutine 只应该用于小函数?因为我还没有完全决定要用 Python,所以我在考虑其他选择。
补充:我发现问题出在 Google Chrome,而不是 Python。在其他浏览器中,一切都按预期工作,所以这个示例实际上已经在多个线程中运行了。不过,我不知道该如何在这里关闭这个问题。