Многопроцессорность не очищает кешPython

Программы на Python
Anonymous
Многопроцессорность не очищает кеш

Сообщение Anonymous »

Я пытаюсь использовать многопроцессорную обработку, чтобы оптимизировать некоторые вычисления. Код для его запуска выглядит примерно так:

Код: Выделить всё

if __name__ == "__main__":
params = list(itertools.product(cutoff_hours, cutoff_minutes, chunk_sizes, buffer_sizes, products, optimize_ons))

params_dilled = [dill.dumps(param) for param in params]

with multiprocessing.Pool(processes=20, initializer=worker_init, maxtasksperchild=10) as pool:
results = pool.map(compute_for_parameters, params_dilled)
где:

Код: Выделить всё

def worker_init():
globals()["dill"] = dill
и:

Код: Выделить всё

def compute_for_parameters(params_dilled):
try:
params = dill.loads(params_dilled)

var1, var2, var3 = params

try:
starter = StarterClass(
var1=var1,
var2=var2,
var3=var3,
)

results = starter.get_data()

return results
except Exception as e:
logging.error(f"Error processing parameters {params}: {e}")
raise
finally:
logger.info(f"Clearing cache...")
del pnl, results
gc.collect()
Каждый экземпляр StarterClass загружает некоторые данные (к сожалению, большие), размер которых, вероятно, соответствует примерно 500 МБ.
Моя проблема в том, что вначале все идет хорошо. Он загружается, рассчитывает и переходит к следующему. Но по мере развития многопроцессорной обработки я вижу, что в памяти кэшируется все больше и больше данных, и в конечном итоге вся моя оперативная память используется для кэширования, и все просто останавливается или становится безумно медленным.
Как обойти или хотя бы очистить кэш при завершении процесса?
The:

Код: Выделить всё

finally:
logger.info(f"Clearing cache...")
del pnl, results
gc.collect()
похоже, мало что делает. Кроме того, результаты не занимают большого размера, поэтому, хотя они и сохраняются, это не должно вызывать беспокойства.
Или мне нужен какой-то другой подход для этого ?

Подробнее здесь: https://stackoverflow.com/questions/783 ... lear-cache

Вернуться в «Python»