Ответ 1
Gunicorn действительно имеет это доступное как вариант конфигурации - посмотрите max_requests.
У меня есть приложение с медленной утечкой памяти, которое по разным причинам я не могу избавиться. Поэтому я хотел бы использовать старый трюк, когда мои рабочие периодически умирают и оживают.
(т.е. использовать ту же стратегию, что и maxtasksperchild в многопроцессорном пуле... "... Частая модель, найденная в других системах (например, Apache, mod_wsgi и т.д.) для освобождения ресурсов, удерживаемых рабочими, - это позволить работнику в пределах пул, чтобы завершить только заданный объем работы перед тем, как выходить, очищаться и новый процесс, созданный для замены старого..." )
Пока лучшее, что я смог придумать, это иметь поток, который спит, а затем вызывает os._exit(-1)
.
Это путь, или есть лучший способ периодически перерабатывать моих работников?
Вот путь, на который я сейчас опускаюсь:
class Quitter(Thread):
def run(self):
while True:
time.sleep(random.randrange(5, 7)):
print str(os.getpid())
os._exit(-1)
Quitter().start()
К какому артиллеристу отвечает:
2013-03-13 03:21:24 [6487] [INFO] Booting worker with pid: 6487
...
2013-03-13 03:21:30 [6492] [INFO] Booting worker with pid: 6487
Gunicorn действительно имеет это доступное как вариант конфигурации - посмотрите max_requests.