我正在尝试在 GAE 上使用 Python 创建一个简单的 Web 应用程序。该应用程序需要根据收到的请求生成一些线程。为此,我正在使用 python 的线程库。我生成所有线程,然后等待它们。
t1.start()
t2.start()
t3.start()
t1.join()
t2.join()
t3.join()
应用程序运行良好,除了线程是串行运行而不是并发运行(通过在每个线程的 run() 方法的开始/结束处打印时间戳来确认这一点)。我已按照 http://code.google.com/appengine/docs/python/python27/using27.html#Multithreading 中给出的说明进行操作启用多线程
我的 app.yaml 看起来像:
application: myapp
version: 1
runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /favicon\.ico
static_files: favicon.ico
upload: favicon\.ico
- url: /stylesheet
static_dir: stylesheet
- url: /javascript
static_dir: javascript
- url: /pages
static_dir: pages
- url: .*
script: main.app
我通过在首选项中明确设置路径来确保我的本地 GoogleAppLauncher 使用 python 2.7。
我的线程平均运行时间为 2-3 秒,在此期间它们进行 url open 调用并对结果进行一些处理。
我是不是做错了什么,或者缺少一些启用多线程的配置?
最佳答案
您是否在 dev_appserver 中或在将您的应用上传到生产服务后遇到过这种情况?从您提到的 GoogleAppLauncher 看来,您可能会在 dev_appserver 中看到它; dev_appserver 不模拟生产服务器的线程行为,您会惊讶地发现它在部署应用程序后工作得很好。 (如果没有,请在此处添加评论。)
另一个想法:如果您大部分时间都在等待 urlfetch,则可以使用 urlfetch 的异步接口(interface)并行运行许多 urlfetch 调用: http://code.google.com/appengine/docs/python/urlfetch/asynchronousrequests.html
这种方法不需要线程。 (它仍然不能正确地并行化 dev_appserver 中的请求;但它确实可以在生产服务器上正确地执行操作。)
关于python - GAE python线程不并行执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9351719/