Дочерние процессы порождают более 16 ядер, но только одно ядро ​​выполняет вычисления - PullRequest
0 голосов
/ 23 апреля 2020

Я хотел бы запустить функцию в списке словарей параллельно с помощью 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)

Похоже, что при выполнении дочерние процессы порождают, но просто одно ядро ​​запускает вычисления и некоторые процессы прекращаются во время выполнения.

enter image description here

Конфигурация системы представляет собой сервер windows 10 с 128 ГБ ОЗУ и 32 ядрами ,

В чем может быть причина?

PS: функция foo буквально объединяет некоторые кадры данных, которые являются значениями "dictionary", а затем выполняет некоторые вычисления для них и возвращает окончательный кадр данных. Дочерние процессы независимы друг от друга.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...