基于集合作为数据结构而不是列表的分布式任务队列

Hos*_*com 8 python message-queue rabbitmq redis celery

我想知道是否有办法设置RabbitMQ或Redis与Celery一起工作,这样当我将任务发送到队列时,它不会进入任务列表,而是进入一组基于的任务键入我的任务的有效负载,以避免重复.

这是我的更多上下文设置:Python + Celery.我已经尝试过RabbitMQ作为后端,现在我使用Redis作为后端,因为我不需要100%的可靠性,更易于使用,占用内存小等.

我有大约1000个需要反复完成工作的ID.我的数据管道的第1阶段由调度程序触发,它输出第2阶段的任务.任务只包含需要完成工作的ID,实际数据存储在数据库中.我可以毫无伤害地运行第1阶段和第2阶段任务的任何组合或顺序.

如果阶段2没有足够的处理能力来处理阶段1输出的任务量,我的任务队列就会增长和增长.如果使用的任务队列设置为基础数据结构而不是列表,则不必如此.

是否存在从列表切换到集合作为分布式任务队列的现成解决方案?芹菜能做到这一点吗?我最近看到Redis刚刚发布了一个队列系统的alpha版本,所以还没有为生产使用做好准备.

我应该以不同方式构建我的管道

Max*_*ian 1

您在第二阶段的任务是否可以检查工作是否已经完成,如果已经完成,则不再执行该工作?这样,即使您的任务列表会增加,您需要完成的工作量也不会增加。

我还没有遇到关于集合/列表的解决方案,我认为还有很多其他方法可以解决这个问题。