Python, входные строки фрейма данных pandas, выходные строки другого фрейма данных. Работать параллельно - PullRequest
0 голосов
/ 09 июля 2019

Мне нужна помощь, чтобы запустить параллельный код на python. Я не думаю, что для моей проблемы я могу поделиться исполняемым кодом, но все же вы можете помочь мне концептуально решить мою проблему.

Я написал функцию, которая принимает в качестве входных данных строку данных panda. Эта функция выполняет несколько x вычислений и возвращает обратно строку из фрейма данных panda, в качестве входных данных которого используются разные имена столбцов.

До сих пор я использовал это в цикле for для получения в качестве входных данных строк, а после возвращения функции я добавлял ее вывод в новый фрейм данных

new_df=pd.DataFrame(columns=['1','2','unique','occurence','timediff','ueid'], dtype='float')

for i in range(0,small_pd.shape[0]): #small_pd the input of the dataframe
    new_df=new_df.append(SequencesExtractTime(small_pd.loc[i]))

Теперь у меня проблема с параллельным выполнением этого кода. Я нашел многопроцессорный пакет.

from joblib import Parallel, delayed
import multiprocessing

num_cores = multiprocessing.cpu_count()

results = Parallel(n_jobs=num_cores)(SequencesExtractTime(small_pd.loc)(i) for i in range(0,small_pd.shape[0]))

но, к сожалению, это не выполняется, так как я не знаю, как объявить, что входные данные - это отдельные строки этого фрейма данных.

Не могли бы вы помочь мне с тем, как я могу добиться такого распараллеливания в python? Входные данные - это строки информационного кадра, выходные данные - это строки информационного кадра, которые необходимо объединить.

Большое спасибо

Привет

Alex

1 Ответ

1 голос
/ 09 июля 2019

Вы можете использовать Пул объект в многопроцессорной обработке Python.

import multiprocessing as mp
num_workers = mp.cpu_count()  
pool = mp.Pool(num_workers)
results_pool = []
for i in range(0,small_pd.shape[0]):    
results_pool.append(pool.apply_async(SequencesExtractTime,args=(i)))
pool.close()
pool.join()
multi_results = [r.get() for r in results_pool]
print (multi_results)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...