Прежде чем мы начнем, я делаю все в контейнере Python (AWS Fargate), поэтому есть некоторые ограничения.
Я использую модуль Flask для запуска веб-сервера и запуска постоянного дочернего процесса с модулем многопроцессорной обработки. запускать повторяющиеся фоновые задачи. Все работает нормально, но ночью дочерний процесс зависает случайно, без логов или следов. Я даже запустил пользовательскую проверку работоспособности, чтобы убедиться, что она жива и работает, но она перестает работать, загрузка ЦП падает, и я не могу понять, что происходит. Он выполняет много сетевых вызовов, но я ожидал, что он завершится по таймауту, а не зависнет. Загрузка ЦП не работает на ~ 40%, пока он работает, а объем оперативной памяти постоянен на уровне 18%. Потенциально в нем могут заканчиваться файловые дескрипторы, но с чего бы это?
Код выглядит следующим образом:
from flask import Flask
from multiprocessing import Process
import time
def poll():
while True:
blablabla
time.sleep(60)
p = Process(target=poll)
p.start()
p.join
app = Flask(__name__)
@app.route('/', methods=['GET'])
def java():
return app.send_static_file('java.html')
Я не могу использовать тайм-ауты, потому что дочерний процесс должен работать бесконечнои я не могу порождать новый процесс каждые несколько минут, потому что ядро контейнера довольно скоро исчерпает PID. Я не понимаю, как я могу использовать «попробовать», потому что это не сбой, а просто перестает отвечать.
Технически, я могу запустить другой контейнер для этой подзадачи, но мне интересно, есть ли лучшее решение?
Спасибо