我使用celery来做一些IO任务,比如抓取远程图像,向用户发送电子邮件。但芹菜有时会被挡在没有原木的地方。此时,它不会执行我发送的任何任务。我必须重新启动它,它从阻塞的地方开始工作。
它困扰了我很长一段时间。我能做些什么?使用celery分发IO任务的最佳实践是什么?
发布于 2014-01-13 14:07:22
默认情况下,celery worker会派生多个进程,等待来自客户端的任务请求。对于IO挂起的任务,您的系统需要大量并发处理请求。下面是命令:
celery -A tasks worker --without-heartbeat -P threads --concurrency=10如果同时传入请求很多,则必须将并发级别设置为高于传入请求突发的大小。系统的性能可能会受到硬件内存大小或操作系统选择API的限制。当并发很大时,您可以使用celery的线程/ gevent模型:
celery -A tasks worker --without-heartbeat -P threads --concurrency=1000或
celery -A tasks worker --without-heartbeat -P gevent --concurrency=1000https://stackoverflow.com/questions/12950682
复制相似问题