in services/worker/src/worker/executor.py [0:0]
def start(self) -> None:
worker_loop_executor = self._create_worker_loop_executor()
worker_loop_executor.start() # blocking until the banner is printed
self.executors.append(worker_loop_executor)
web_app_executor = self._create_web_app_executor()
web_app_executor.start() # blocking until socket connection is established
self.executors.append(web_app_executor)
loop = asyncio.get_event_loop()
loop.add_signal_handler(signal.SIGTERM, self.sigterm_stop)
logging.info("Starting heartbeat.")
loop.create_task(every(self.heartbeat, seconds=self.heartbeat_interval_seconds))
loop.create_task(
every(
self.kill_zombies,
seconds=(
self.kill_zombies_interval_seconds * 0.5,
self.kill_zombies_interval_seconds * 1.5,
),
)
)
loop.create_task(
every(
self.kill_long_job,
worker_loop_executor=worker_loop_executor,
seconds=(
self.kill_long_job_interval_seconds * 0.5,
self.kill_long_job_interval_seconds * 1.5,
),
)
)
loop.run_until_complete(
every(self.is_worker_alive, worker_loop_executor=worker_loop_executor, seconds=1.0, stop_on=False)
)
logging.info("Executor loop finished.")