1

我用 celery 做一些 IO 任务,比如抓取远程图片,给用户发邮件。但芹菜有时会因没有原木而阻塞。此时,它不会执行我发送的任何任务。我必须重新启动它,它开始在它阻塞的地方工作。

它让我困惑了很长时间。我能做些什么 ?用 celery 分发 IO 任务的最佳实践是什么?

4

2 回答 2

1

默认情况下,celery worker fork 多个进程等待来自客户端的任务请求。对于 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
于 2014-01-13T06:07:21.533 回答
0

你可以增加芹菜并发

manage.py celeryd --concurrency=3  

其中并发 == 处理器数量

运行外壳命令

   grep -c 处理器 /proc/cpuinfo

获取您机器上的处理器数量

于 2012-10-18T11:34:14.010 回答