Как избежать утечки памяти при использовании ThreadPoolExecutor.
Я использую ThreadPoolExecutor для запуска задач. Он работал около нескольких месяцев, но обслуживание выполнялось более 3 раз. Интересно, занимает ли мой код чрезмерный объем памяти и как его избежать.
def all_job_finished(tasks):
for t in tasks:
if not t.done():
return False
tasks.remove(t)
return True
def schedule_job():
start_time = datetime.now()
executor = ThreadPoolExecutor(max_workers=xxx)
tasks = []
for item in list[xxx]:
tasks.append(executor.submit(function-test().func))
while not all_job_finished(tasks):
if utils.check_timeout(start_time, 50):
# I want to kill tasks when timeout (50s lather)
for t in tasks:
t.cancel()
executor.shutdown(False)
return
Я обнаружил, что использование памяти программы быстро увеличивается. Интересно, вызвано ли это этими кодами.