[[Django Celery]] Celery阻止了IO任务

时间:2012-10-18 08:51:59

标签: django io celery

我使用芹菜做一些IO任务,例如抓取远程图像,向用户发送电子邮件。 但芹菜有时会被堵塞,没有原木。这时,它不会执行我发送的任何任务。我必须重新启动它,它开始工作在它阻止的地方。

这让我很困惑。我能做什么 ?使用芹菜分发IO任务的最佳做法是什么?

2 个答案:

答案 0 :(得分:1)

默认情况下,celery worker会从客户端分叉几个进程等待任务请求。 对于IO挂起的任务,您的系统需要处理大量的并发 同时请求。这是命令:

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

如果同意收入请求很多,则您的并发级别必须设置为高于传入请求突发的大小。 系统的性能可能受硬件内存大小或操作系统选择API的限制。 当并发性很大时,你可以使用celery的thread / gevent模型:

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

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

答案 1 :(得分:0)

你可以增加芹菜并发性

manage.py celeryd   --concurrency=3  

其中concurrency ==处理器数

运行shell命令

   grep -c processor /proc/cpuinfo

获取计算机上的处理器数量