我想運行50個任務。所有這些任務執行相同的一段代碼。數據只有不同之處。哪個會更快完成?Google App Engine任務隊列
a。排隊排隊50個任務
b。在10個不同的隊列中分別排隊5個任務
在使用另一個隊列之前是否有任何可以在1個隊列中排隊的理想數量的任務?
我想運行50個任務。所有這些任務執行相同的一段代碼。數據只有不同之處。哪個會更快完成?Google App Engine任務隊列
a。排隊排隊50個任務
b。在10個不同的隊列中分別排隊5個任務
在使用另一個隊列之前是否有任何可以在1個隊列中排隊的理想數量的任務?
執行任務的速度取決於兩個因素:運行應用程序的實例數量以及任務所在的隊列的執行速率。
最大任務隊列執行速率現在爲每個隊列每秒100個,所以這不太可能是一個限制因素 - 因此將它們添加到同一個隊列沒有任何壞處。在任何情況下,更多執行率的隊列之間的分片最多隻能是黑客行爲。隊列被設計用於功能分離,而不是作爲性能指標。
排隊50個任務,並將您的隊列設置爲一次處理10個或任何您想要的,如果他們可以獨立運行。我看到類似的問題,我一次只運行10個任務來處理3300左右的需要運行的任務。處理所有這些需要45分鐘左右的時間,但使用的CPU時間令人驚訝,可以忽略不計。
任務隊列的爆發率由桶大小控制。如果在隊列的桶中有一個令牌,則該任務應立即運行。所以如果你有:
queue:
- name: big_queue
rate: 50/s
bucket_size: 50
而且沒有在第二個任務中排隊任何任務所有的任務應該立即開始。
有關更多信息,請參閱http://code.google.com/appengine/docs/python/config/queue.html#Queue_Definitions。
將任務分成不同的隊列不會改善響應時間,除非桶沒有足夠的時間完全填充令牌。
我想在混合併發中增加另一個因素。如果你的任務運行緩慢(超過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設置爲最大值)任務
這是一個黑客,但整個隊列分發任務具有其他價值了。我有時會看到一個隊列放緩,沒有明顯的原因,而其他隊伍的速度仍然很高。當然,除非你處理大量的任務,這可能是一個沒有問題的問題。 –