如何从Celery任务中的其他队列中拉取

时间:2018-11-25 19:06:00

标签: python architecture rabbitmq celery eventlet

我有一个任务队列(队列A)和一个资源队列(队列B)。在程序启动时,队列B中放置了有限数量的资源。如果任务能够从队列中拉出资源,则可以执行任务B,一旦执行完毕,他们必须将资源放回队列B。

使用Celery,是否有办法从任务中的其他队列中拉出来完成此任务?还是需要完全不同地设计架构?

尽管可能会降低并发性,但另一种方法是在将任务与资源放入任务队列之前进行配对,然后轮询任务以完成任务,并在完成任务后释放该资源并将其放回任务队列中。一个不同的任务。这是标准解决方案吗?

1 个答案:

答案 0 :(得分:0)

我最终决定使用的体系结构是在Celery中的chain原语的帮助下完成的,而并发性没有损失。

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