цикл Pool.map и ошибки памяти - PullRequest
0 голосов
/ 19 сентября 2019

У меня проблема с памятью, когда я пытаюсь запустить следующую проблему.

Рассмотрим функцию, которая для каждого аргумента, arg_i_j, возвращает кадр данных pandas как,

def some_fun(arg_i_j):
   ...
   return DF_i_j

Теперь я структурировал все аргументы, которые я хочу проверить, в следующем формате,

All_lists = [ [arg_0_0,..., arg_0_N], ..., [arg_k_0,..., arg_k_N]], 

, и я пытаюсь выполнить следующий код в основной функции

# Version A
results_per_list = []
the_pool = multiprocessing.Pool(processes=mp.cpu_count(), initializer=...,initargs=...)
for a_list in All_lists:
   results = the_pool.map(some_fun, a_list) 
   results_per_list.append(results)
the_pool.close()
the_pool.join()

# then use results_per_list to do operations

и я получаю сообщение об ошибке:

...\multiprocessing\connection.py", line 251, in recv
    return _ForkingPickler.loads(buf.getbuffer())
MemoryError

1) Кто-нибудь знает, как мне решить эту проблему ??

2) Вы видите какие-либо проблемы при создании пула?"объект для каждого" a_list "в" All_lists ", как показано ниже?

# Version B
results_per_list = []
for a_list in All_lists:
   the_pool = multiprocessing.Pool(processes=mp.cpu_count(), initializer=...,initargs=...)
   results = the_pool.map(some_fun, a_list) 
   results_per_list.append(results)
   the_pool.close()
   the_pool.join()
...