【问题标题】:[[Django Celery]] Celery blocked doing IO tasks[[Django Celery]] Celery 阻止执行 IO 任务
【发布时间】:2012-10-18 08:51:59
【问题描述】:

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

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

【问题讨论】:

    标签: django io celery


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      可以增加 celery 并发

      manage.py celeryd --concurrency=3

      其中并发 == 处理器数量

      运行shell命令

      grep -c 处理器 /proc/cpuinfo

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

      【讨论】:

      • 另外,你应该设置一个超时时间。
      猜你喜欢
      • 1970-01-01
      • 2013-06-30
      • 1970-01-01
      • 2014-01-18
      • 2012-04-12
      • 2015-08-08
      • 2018-11-28
      • 2011-11-22
      • 1970-01-01
      相关资源
      最近更新 更多