芹菜与充满活力的工人

时间:2018-01-24 15:01:50

标签: python-3.x celery celery-task flower

我正在整理基于Celery的数据提取管道。我在文档中没有看到的一件事是如何构建一个流程,其中工作人员只在有工作要做时才运行。 (老实说,这似乎是Celery设计中的一个主要缺陷)

我知道Celery本身不会处理实际服务器的自动缩放,这很好,但是当我模拟这个Flower时,除非工作人员在提交任务时在线,否则不会看到提交的工作。为什么?我喜欢这样一个我不会为服务器付费的世界,除非有实际的工作要做。

工作流:

  1. 想象一下,使用celery_app.send_task方法添加要处理的新数据的While循环。

  2. 我有自定义代码,可以看到队列中的N条消息。它会旋转一个服务器,并为该任务启动一个Celery工作程序。

  3. 芹菜工作者上线,完成工作。

  4. BUT。

    Flower没有关于那个任务的记录,即使我看到经纪人有一条"消息",并且在观察工人的输出时,我可以看到它做了它的事情。

    如果我将工作人员保持在线状态,然后提交任务,它会监控所有内容。

    任何人都知道为什么?

1 个答案:

答案 0 :(得分:0)

您可以使用芹菜自动缩放。例如,将autoscale设置为8表示将最多触发8个进程来处理您的队列。但是它将有一个主进程等待。您还可以设置一个最小值,例如2-8,它将有2个工人在等待,但如果需要(例如在队列为空时缩小),则激发更多工人(最多8个)。

这是基于过程的自动缩放器。如果您想创建一个基于云的自动缩放器,例如,它可以激发新节点而不只是进程,则可以将其用作参考。

关于您的鲜花问题,很难不认识您的经纪人(redis / rabbit / etc)。 Flower不能捕获所有内容,因为它依赖于代理执行此操作,并且某些配置会导致代理删除诸如已运行任务的信息。