python - GAE python线程不并行执行

标签 python google-app-engine python-2.7

我正在尝试在 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/

相关文章:

python - 从 docx 文件中删除所有图像

java - Activity 中的 GWT Rest 回调始终为空/null

python - Google 应用引擎或查询 (python)

python - 无法在 Python 2.7.9 虚拟环境中导入 _winreg

python - Pandas 原始数据框已更改

python - 如果我使用 [LOGLEVEL],如何向 python 标准记录器添加对齐方式?

Python 导入错误 : cannot import name __version__

python - Anaconda:如何彻底删除 Python 3.4?

python - 用 1 替换 Pandas 数据框中的非零值

google-app-engine - ndb.EVENTUAL_CONSISTENCY 选项是什么意思?