如何从Celery任务中的不同队列中提取



我有一个任务队列,队列a和一个资源队列,队列B。在程序开始时,队列B中放入的资源数量有限。如果任务能够从队列B中提取资源,则任务可能会执行,一旦执行完,就必须将资源放回队列B。

使用Celery,有没有一种方法可以从任务中的不同队列中提取来实现这一点?或者这需要完全不同的架构吗?

另一种选择是,尽管可能会降低并发性,但在将任务放入任务队列之前,将任务与资源配对,然后轮询任务是否完成,完成后释放该资源,并将其与另一个任务一起放回任务队列。这是标准溶液吗?

我最终决定的体系结构在Celery中的chain原语的帮助下实现了这一点,同时不会损失并发性。

为了确保没有两个任务同时使用同一资源,您可以在将任务添加到队列之前,将所有任务分配给可用资源(假设您有10个任务和3个资源,只需将3个任务分配给其中两个资源,将4个分配给第三个资源(。然后,对于每个资源,用chain()调用任务,这告诉Celery串行执行该资源的每个任务。

相关内容

  • 没有找到相关文章

最新更新