#python #concurrency #memory-leaks #concurrent.futures
#python #параллелизм #утечки памяти #concurrent.futures
Вопрос:
В настоящее время я использую concurrent.futures.ThreadPoolExecutor
в своем коде для одновременного выполнения одного из разделов моего кода, но после некоторого запуска я вижу увеличение потребления памяти моим основным процессом, которое просто продолжает расти и не освобождается.
В настоящее время я использую concurrent.futures.ThreadPoolExecutor
вот так:
with concurrent.futures.ThreadPoolExecutor(max_workers=10) as pool:
processing_data = pool.map(handle_item, items_dict.values())
# Using the data in processing_data...
Я видел, что у некоторых других людей возникали проблемы с потреблением памяти при использовании этого модуля, но другие вопросы по SO, которые я обнаружил, все использовали его немного по-другому, и мне показалось, что это не относится к моему случаю.
Если кто-нибудь знает, что я здесь делаю не так или как я мог бы это исправить, я буду благодарен
Спасибо всем
Редактировать:
Вот пример кода, который воспроизводит потенциальную утечку памяти:
#!/usr/bin/env python3
import os
import time
import psutil
import random
import concurrent.futures
from memory_profiler import profile as mem_profile
p = psutil.Process(os.getpid())
def do_magic(values):
return None
@mem_profile
def foo():
a = {i: chr(i) for i in range(1024)}
with concurrent.futures.ThreadPoolExecutor(max_workers=10) as pool:
proccessed_data = pool.map(do_magic, [1,2,3,4,5,6,7,8,9,10])
def fooer():
while True:
foo()
time.sleep(1)
fooer()