Я хотел бы запустить функцию в списке словарей параллельно с помощью multiprocessing.pool ().
def foo(dictionary):
a = dictionary['key1'] #the value of key1 is a dataframe
b = dictionary['key2'] #the value of key2 is a dataframe
c = a.merge(b)
#
#
#...
#other computations
#
#
return final_df
all_dict = [dictionary1, dictionary2, ...] #list of dictionaries as foo's argument
len(all_dict)
16
from multiprocessing import Pool
if __name__ == '__main__':
with Pool(16) as p:
final = p.map(foo, [dic for dic in all_dict])
final = pd.concat(final)
Похоже, что при выполнении дочерние процессы порождают, но просто одно ядро запускает вычисления и некоторые процессы прекращаются во время выполнения.
Конфигурация системы представляет собой сервер windows 10 с 128 ГБ ОЗУ и 32 ядрами ,
В чем может быть причина?
PS: функция foo
буквально объединяет некоторые кадры данных, которые являются значениями "dictionary"
, а затем выполняет некоторые вычисления для них и возвращает окончательный кадр данных. Дочерние процессы независимы друг от друга.