.. _worker_manager: WorkerManager ============= Method ``WorkerManager.run(timeout)`` (see diagram below) tries to process as many tasks from queue as possible within specified timeout. The task heavy-lifting is done in separate independent background daemons, one for each task (daemons follow ``BackgroundWorker class`` abstraction, see e.g. :ref:`backend-build-process` example). .. image:: /_static/worker-manager-run.uml.png Note that tasks which are not finished after one **run()** call are still tracked in internal queue structure, and will be finished in one of the subsequent **run()** calls. Since the spawned workers are background (daemon) jobs, we use Redis DB for ``WorkerManager <-> BackgroundWorker`` communication; that said ``WM`` collects the job status from the background worker.