3

我想运行 50 个任务。所有这些任务都执行同一段代码。唯一不同的是数据。哪个会更快完成?

一种。在队列中排队 50 个任务

湾。在 10 个不同的队列中排队 5 个任务

在使用另一个队列之前,是否有任何理想数量的任务可以在 1 个队列中排队?

4

4 回答 4

3

任务的执行速度取决于两个因素:应用程序运行的实例数量,以及任务所在队列的执行速度。

最大任务队列执行率现在是每个队列每秒 100 个,因此这不太可能成为限制因素 - 因此将它们添加到同一个队列没有害处。在任何情况下,队列之间的分片以提高执行率充其量只是一种技巧。队列是为功能分离而设计​​的,而不是作为性能衡量标准。

于 2011-02-25T02:43:39.707 回答
0

排队 50 个任务并将您的队列设置为一次处理 10 个或任何您想要的,如果它们可以彼此独立运行。我看到一个类似的问题,我一次只运行 10 个任务来处理 3300 左右,我需要运行。处理所有这些需要 45 分钟左右,但所使用的 CPU 时间令人惊讶地可以忽略不计。

于 2011-02-25T02:43:42.597 回答
0

任务队列的突发率由桶大小控制。如果队列的存储桶中有令牌,则任务应立即运行。因此,如果您有:

queue:
- name: big_queue
  rate: 50/s
  bucket_size: 50

并且在一秒钟内没有排队任何任务,所有任务都应该立即开始。

有关详细信息,请参阅http://code.google.com/appengine/docs/python/config/queue.html#Queue_Definitions

将任务分成不同的队列不会提高响应时间,除非存储桶没有足够的时间来完全填满令牌。

于 2011-02-25T02:44:45.087 回答
0

我会在混合并发中添加另一个因素。如果您的任务运行缓慢(超过 30 秒左右),那么 AppEngine 似乎很难扩大正确数量的实例来处理请求(对我来说似乎最多大约 7-8 个)。

从 SDK 1.4.3 开始,您的 queue.xml 和 appengine-web.config 中有一个设置可以用来告诉 AppEngine 每个实例一次可以处理多个任务:

<threadsafe>true</threadsafe> (in appengine-web.xml)
<max-concurrent-requests>10</max-concurrent-requests> (in queue.xml)

这解决了我所有任务执行太慢的问题(尽管将所有其他队列参数设置为最大值)

更多详情 (http://blog.crispyfriedsoftware.com)

于 2011-07-18T15:52:29.810 回答