是否存在现成的作业队列框架?基本思想是
- 将作业状态为
New
的作业排入队列的人 - (多个(工人得到一个工作并在上面工作,将该工作标记为
Taken
。一个作业最多只能在一个工作人员上运行 - 如果正在运行的作业超过预定义的超时时间,则会监视工作进程状态,并将其重新排入队列,状态为
New
,这可能是工作进程健康问题 - 工作人员完成任务后,会在队列中将该任务标记为
Completed
- 某些东西不断清理已完成的任务。或者在步骤#4,当工作者完成一个任务时,工作者简单地将该任务出列
根据我的调查,像Kafka(pub/sub(或MQ(push/pull&pub/sub。然而,它们都需要围绕其核心功能进行某种开发,才能成为一个功能齐全的作业队列。
还研究了关系数据库;SELECT*FOR UPDATE SKIP LOCKED";语法也是一个很好的候选者,这再次需要DB和worker之间的守护进程,这意味着要付出额外的努力。
还考察了云解决方案、Azure队列存储等类似的评估。
所以我的问题是,有没有现成的工作队列解决方案,专门为一件事量身定制,即工作队列,而不需要太多精力来设置?
感谢
看看Python Celery。https://docs.celeryproject.org/en/stable/getting-started/introduction.html
默认模式使用RabbitMQ作为消息代理,但也可以使用其他选项。如果需要,可以将结果存储在数据库中。