2012-10-18 81 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