Ограничить количество одновременных задач с Redis и ARQ - PullRequest
0 голосов
/ 30 сентября 2019

Я хотел бы распределить определенные задачи по произвольному количеству подключенных «работников», которые используют очередь Redis, используя arq's функциональность. Я могу отправлять асинхронные задачи, но важно, чтобы каждый работник выполнял только одну задачу за раз, извлеченную из центральной очереди. Он должен быть масштабируемым, чтобы разрешить столько рабочих, сколько необходимо для пула 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 должна в значительной степени делать то, что я хочу, но запускатьнесколько рабочих (до отправки задач) не приводят к последовательному распределенному выполнению задач.

...