Код: Выделить всё
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()
Моя проблема в том, что вначале все идет хорошо. Он загружается, рассчитывает и переходит к следующему. Но по мере развития многопроцессорной обработки я вижу, что в памяти кэшируется все больше и больше данных, и в конечном итоге вся моя оперативная память используется для кэширования, и все просто останавливается или становится безумно медленным.
Как обойти или хотя бы очистить кэш при завершении процесса?
The:
Код: Выделить всё
finally:
logger.info(f"Clearing cache...")
del pnl, results
gc.collect()
Или мне нужен какой-то другой подход для этого ?
Подробнее здесь: https://stackoverflow.com/questions/783 ... lear-cache