Я пытаюсь использовать класс пула в многопроцессорном модуле в python для параллельной обработки некоторых данных во фрейме данных pandas (код указан в разделе «Основной код» ниже). Проблема в том, что мой код застревает и не завершает работу, даже если я предоставлю ему небольшой фрейм входных данных (даже 10 строк). Я также попытался запустить простой пример кода (код, упомянутый в разделе «Пример пула» ниже), и даже он не запускается.
Вот подробное описание того, что я пытаюсь сделать, в приведенном ниже коде:
У меня есть индекс данных dataframe, который имеет 10 столбцов и 650K строк. Идея состоит в том, чтобы взять 10 значений в каждом ряду фрейма данных индексов, а для строк с этими индексами из целевого фрейма данных traindat взять среднее из нескольких его столбцов. Я должен сделать это для всех строк индекса данных (650K).
Основной код:
from multiprocessing import Pool
def func(x,i):
dftmp=traindat.iloc[x,4:28].mean()
return pd.DataFrame(dftmp).transpose()
pool = mp.Pool(processes=3)
new_rows = pool.map(func, [(row,idx) for idx,row in indices.iterrows()])
pool.close()
pool.join()
data_all_new = pd.concat(new_rows)
Поскольку этот код не запускается, я также попробовал следующий простой код, чтобы посмотреть, работает ли пул вообще для меня. И это не так.
Пример пула:
import sys
sys.modules['__main__'].__file__ = 'ipython'
from multiprocessing import Pool
def f(x):
return x*x
if __name__ == '__main__':
p = Pool(5)
print(p.map(f, [1, 2, 3]))
В моем коде нет ошибок. Это просто застревает и не заканчивает бежать. Пожалуйста, помогите мне, если вы понимаете эту проблему.
Редактировать: позже я понял, что проблема возникает только в Windows. Таким образом, редактирование вопроса, чтобы включить это.