|
30 | 30 | restart_workers = True |
31 | 31 | worker_processes: List[Process] = [] |
32 | 32 | observer = Observer() |
33 | | -reload_queue: "Queue[int]" = Queue(-1) |
| 33 | +reload_queue: "Queue[bool]" = Queue(-1) |
34 | 34 |
|
35 | 35 |
|
36 | 36 | def signal_handler(_signal: int, _frame: Any) -> None: |
@@ -73,10 +73,8 @@ def schedule_workers_reload() -> None: |
73 | 73 | global worker_processes # noqa: WPS420 |
74 | 74 | global reload_queue # noqa: WPS420 |
75 | 75 |
|
76 | | - logger.info("Reloading workers") |
77 | | - for worker_id, _ in enumerate(worker_processes): |
78 | | - reload_queue.put(worker_id) |
79 | | - logger.info("Worker %s scheduled to reload", worker_id) |
| 76 | + reload_queue.put(True) |
| 77 | + logger.info("Scheduled workers reload.") |
80 | 78 | reload_queue.join() |
81 | 79 |
|
82 | 80 |
|
@@ -261,17 +259,20 @@ def watcher_loop(args: TaskiqArgs) -> None: # noqa: C901, WPS213 |
261 | 259 | # List of processes to remove. |
262 | 260 | sleep(1) |
263 | 261 | process_to_remove = [] |
264 | | - while not reload_queue.empty(): |
265 | | - process_id = reload_queue.get() |
266 | | - worker_processes[process_id].terminate() |
267 | | - worker_processes[process_id].join() |
268 | | - worker_processes[process_id] = Process( |
269 | | - target=start_listen, |
270 | | - kwargs={"args": args}, |
271 | | - name=f"worker-{process_id}", |
272 | | - ) |
273 | | - worker_processes[process_id].start() |
274 | | - reload_queue.task_done() |
| 262 | + if not reload_queue.empty(): |
| 263 | + while not reload_queue.empty(): |
| 264 | + reload_queue.get() |
| 265 | + reload_queue.task_done() |
| 266 | + |
| 267 | + for worker_id, worker in enumerate(worker_processes): |
| 268 | + worker.terminate() |
| 269 | + worker.join() |
| 270 | + worker_processes[worker_id] = Process( |
| 271 | + target=start_listen, |
| 272 | + kwargs={"args": args}, |
| 273 | + name=f"worker-{worker_id}", |
| 274 | + ) |
| 275 | + worker_processes[worker_id].start() |
275 | 276 |
|
276 | 277 | for worker_id, worker in enumerate(worker_processes): |
277 | 278 | if worker.is_alive(): |
|
0 commit comments