|
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