При использовании многопроцессорного пула python сколько заданий отправлено?
Как это решено? Можем ли мы как-то это контролировать? Как минимум 10 заданий в очереди, чтобы уменьшить использование памяти.
Предположим, у меня есть магистральный код, написанный ниже: Для каждого хрома и симуляции я читаю данные как pandas dataframe.
(я думал, что чтение данных перед отправкой задания было бы лучше, чтобы уменьшить количество операций ввода-вывода, связанных с рабочим процессом)
Затем я отправляю фрейм данных pandas каждому работнику для его обработки.
Но похоже, что отправлено больше заданий, чем завершено заданий, и это приводит к ошибке памяти.
numofProcesses = multiprocessing.cpu_count()
pool = multiprocessing.Pool(processes=numofProcesses)
jobs=[]
all_result1={}
all_result2={}
def accumulate(result):
result1=result[0]
result2=result[1]
accumulate(resulst1,all_result1)
accumulate(resulst2,all_result2)
print('ACCUMULATE')
for each chr:
for each sim:
chrBased_simBased_df= readData(chr,sim)
jobs.append(pool.apply_async(func, args=(chrBased_simBased_df,too,many,),callback=accumulate))
print('Submitted job:%d' %(len(jobs)))
pool.close()
pool.join()
Есть ли способ избавиться от нее?