2012-10-18 77 views
1

我用芹菜做一些IO任務,比如抓取遠程圖像,給用戶發送郵件。 但芹菜有時會堵塞,沒有原木。目前,它不會執行我發送的任何任務。我必須重新啓動它,它會在阻塞的地方開始工作。[[Django芹菜]]芹菜阻塞做IO任務

它困惑了我很長一段時間。我能做什麼 ?用芹菜分配IO任務的最佳實踐是什麼?

回答

0

可以增加芹菜併發

 
manage.py celeryd --concurrency=3 

其中併發==處理器

運行shell命令的數量

 
    grep -c processor /proc/cpuinfo 

,讓您的機器上的處理器數量

+0

另外,你應該設置超時。 –

+1

但爲什麼芹菜被阻塞?我很困惑.. – chenchiyuan

1

默認情況下,芹菜工作者分叉幾個進程等待任務請求來自客戶。 對於掛起IO的任務,您的系統需要大量的併發處理併發處理 請求。下面是一個命令:

celery -A tasks worker --without-heartbeat -P threads --concurrency=10 

如果simutanelous收入的要求很多,你的併發級別必須設置比傳入reqeust突發大小更高。 系統的性能可能受到硬件memeory大小或操作系統選擇API的限制。 您可以使用芹菜的線程/ GEVENT模型時,併發很大:

celery -A tasks worker --without-heartbeat -P threads --concurrency=1000 

celery -A tasks worker --without-heartbeat -P gevent --concurrency=1000