2017-02-27 45 views
1

我在爲Django配置Celery時遇到了問題。在Celery中啓動多個進程

我這是怎麼開始的Django芹菜:任務

python manage.py celery worker --autoscale=10,2 

例子:

@task 
def test(i): 
    print "ITERATION {} START".format(i) 
    time.sleep(10) 
    print "ITERATION {} END".format(i) 
    return True 

而且我把這個任務有:

for i in range(10): 
    test.delay(i) 

我期待發生的情況是,如果我將10個任務發送到隊列中,則應打開10個進程 - 每個任務一個。

實際情況是什麼進程的隨機數被啓動,這4個任務完成,另外3開始和通常爲4和後,他們完成後,另外3開始。甚至對於完成時間較長的任務也會發生這種情況,例如2分鐘。

有人可以解釋這種行爲嗎?如果自動縮放上限允許,我如何立即開始所有任務?

此外,儘管autoscale的下限爲2,但在服務器啓動時,有3個進程運行。這是爲什麼?

平臺:OpenWRT雙核處理器,2GB RAM。

+0

您可能想要檢查celery環境中的併發設置,看看這是否是限制任務。 – postoronnim

回答

0

Celery默認情況下會爲每個內核創建一個工作者,所以我假設您在一臺擁有4個內核的計算機上運行。您可以使用標記--concurrency對此進行配置,請參閱documentation瞭解更多詳細信息。

之後,你說3個進程開始,然後2個等等,一個任務只會在另一個任務完成後纔會啓動,並且由於預取策略,這個任務也可能會延遲。您可以看到this thread瞭解更多詳情。

芹菜啓動一個主流程和X工作人員 - 主進程管理工人,在需要時重啓進程並向工作人員分發任務。因此,如果你有2名工人 - 你將有3個流程。

+0

該機器是雙核心。 你對主流程和工人是正確的。 – bmiljevic

+0

你如何運行芹菜?提供更多信息。你還有沒有開放的問題?我幫忙了嗎? –

相關問題