Утечки памяти в ThreadPoolExecutor в Python3 - PullRequest
0 голосов
/ 25 октября 2019

Как избежать утечки памяти при использовании 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

Я обнаружил, что использование памяти программы быстро увеличивается. Интересно, вызвано ли это этими кодами.

...