我使用芹菜做一些IO任务,例如抓取远程图像,向用户发送电子邮件。 但芹菜有时会被堵塞,没有原木。这时,它不会执行我发送的任何任务。我必须重新启动它,它开始工作在它阻止的地方。
这让我很困惑。我能做什么 ?使用芹菜分发IO任务的最佳做法是什么?
答案 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
获取计算机上的处理器数量