我有一个问题,我认为与此方法的工作原理有关。我正在创建一个由 300 个相当大的任务组成的链,每个任务需要处理很多项目。我创建并异步运行此事件的 Celery 任务,如下所示:
result = chain(*my_tasks).apply_async(ignore_result=True)
所以有时它似乎有效并且所有任务都被执行。但有时,特别是当我有很多大任务要执行时,我在日志中看到第一个任务运行,然后什么也没有。任务消失了。
我在文档中读到,
chain()
将所有单独的任务包装在一个任务下。具体是如何运作的?我还使用 RabbitMQ 作为消息代理。
当链工作时,我看到队列中一条消息出现和消失。就好像队列中总是只有一条消息,它被拾取,然后另一条消息被放在那里。这是芹菜的作用吗?或者第一个从 RabbitMQ 队列中获取任务的工作人员是否会依次执行其中的所有任务?
如果第二种情况为真,初始工作人员是否会失败然后消息消失?非常感谢任何有关此链方法如何工作和/或可能存在问题的澄清。
我猜测
my_tasks
是任务列表,而不是签名列表,因为任何 Celery Canvas 元素都应按预期工作。
如果没有更多信息,基本上无法帮助您。
关于链的文档非常清晰,你真正需要的一切都在那里......