Google App Engine任务队列

时间:2011-02-25 02:27:59

标签: performance google-app-engine task task-queue

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

一个。排队队列中的50个任务

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

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

4 个答案:

答案 0 :(得分:3)

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

现在每个队列的最大任务队列执行速率为100,因此不太可能是限制因素 - 因此将它们添加到同一队列没有任何害处。在任何情况下,队列之间的分片以获得更高的执行速度充其量只是一种黑客攻击。队列设计用于功能分离,而不是性能测量。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

任务队列的破裂率由桶大小控制。如果队列桶中有令牌,则任务应立即运行。所以如果你有:

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

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

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

将任务拆分到不同的队列不会改善响应时间,除非存储桶没有足够的时间来完全填充令牌。

答案 3 :(得分: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)

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

More Details (http://blog.crispyfriedsoftware.com)