我想通过arq's功能将某些任务分配给使用Redis队列的任意数量的连接“工作者”。我能够提交异步任务,但是每个工作人员一次只能从中央队列中检索一个任务,这一点很重要。它应具有可伸缩性,以允许Redis池中容纳所需的尽可能多的工作程序,但每个工作程序执行的任务不得超过一个。
我似乎遇到的问题是,当运行多个工作程序时,似乎其中一个或两者都将占用所有可用任务并一次开始执行它们,但不会分布在工人中。
对于工人,我在两个不同的屏幕会话中运行命令arq tasks.WorkerSettings
:
class WorkerSettings:
functions = [do_work]
job_timeout = td(hours=1)
max_jobs = 1
on_shutdown = shutdown
on_startup = startup
queue_read_limit = 1
根据文档,queue_read_limit
和max_jobs
的组合应该可以完成我想要的操作,但是要运行多个工作程序(在提交任务)不会导致顺序执行分布式任务。