From c0cd79f0d77bd2d109659f3a248eae4b9c1a1889 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sun, 21 Feb 2021 11:07:02 +0100 Subject: [PATCH] Garbage Collect Autohost subprocesses to accumulate less open file descriptors which may crash the webhost service. --- WebHostLib/autolauncher.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/WebHostLib/autolauncher.py b/WebHostLib/autolauncher.py index 392e8feb..025ba325 100644 --- a/WebHostLib/autolauncher.py +++ b/WebHostLib/autolauncher.py @@ -2,6 +2,7 @@ from __future__ import annotations import logging import multiprocessing from datetime import timedelta, datetime +import concurrent.futures import sys import typing import time @@ -136,6 +137,7 @@ def autohost(config: dict): multiworlds = {} +guardians = concurrent.futures.ThreadPoolExecutor(2, thread_name_prefix="Guardian") class MultiworldInstance(): def __init__(self, room: Room, config: dict): @@ -153,12 +155,18 @@ class MultiworldInstance(): args=(self.room_id, self.ponyconfig), name="MultiHost") self.process.start() + self.guardian = guardians.submit(self._collect) def stop(self): if self.process: self.process.terminate() self.process = None + def _collect(self): + self.process.join() # wait for process to finish + self.process = None + self.guardian = None + from .models import Room, Generation, STATE_QUEUED, STATE_STARTED, STATE_ERROR, db, Seed from .customserver import run_server_process