我用芹菜做一些IO任务,比如抓取远程图像,给用户发送邮件。 但芹菜有时会堵塞,没有原木。目前,它不会执行我发送的任何任务。我必须重新启动它,它会在阻塞的地方开始工作。[[Django芹菜]]芹菜阻塞做IO任务
它困惑了我很长一段时间。我能做什么 ?用芹菜分配IO任务的最佳实践是什么?
我用芹菜做一些IO任务,比如抓取远程图像,给用户发送邮件。 但芹菜有时会堵塞,没有原木。目前,它不会执行我发送的任何任务。我必须重新启动它,它会在阻塞的地方开始工作。[[Django芹菜]]芹菜阻塞做IO任务
它困惑了我很长一段时间。我能做什么 ?用芹菜分配IO任务的最佳实践是什么?
可以增加芹菜并发
manage.py celeryd --concurrency=3
其中并发==处理器
运行shell命令的数量
grep -c processor /proc/cpuinfo
,让您的机器上的处理器数量
默认情况下,芹菜工作者分叉几个进程等待任务请求来自客户。 对于挂起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
另外,你应该设置超时。 –
但为什么芹菜被阻塞?我很困惑.. – chenchiyuan