2011-02-25 167 views
3

我想运行50个任务。所有这些任务执行相同的一段代码。数据只有不同之处。哪个会更快完成?Google App Engine任务队列

a。排队排队50个任务

b。在10个不同的队列中分别排队5个任务

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

回答

3

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

最大任务队列执行速率现在为每个队列每秒100个,所以这不太可能是一个限制因素 - 因此将它们添加到同一个队列没有任何坏处。在任何情况下,更多执行率的队列之间的分片最多只能是黑客行为。队列被设计用于功能分离,而不是作为性能指标。

+0

这是一个黑客,但整个队列分发任务具有其他价值了。我有时会看到一个队列放缓,没有明显的原因,而其他队伍的速度仍然很高。当然,除非你处理大量的任务,这可能是一个没有问题的问题。 –

0

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

0

任务队列的爆发率由桶大小控制。如果在队列的桶中有一个令牌,则该任务应立即运行。所以如果你有:

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

而且没有在第二个任务中排队任何任务所有的任务应该立即开始。

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

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

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) 

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

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

相关问题