我需要一些帮助来开始在python中运行一些并行代码。我不认为我可以共享可执行代码,但仍然可以从概念上解决我的问题。
我编写了一个函数,该函数将熊猫数据帧行作为输入。 该函数进行了x次计算,然后从熊猫数据框中返回一行,而该熊猫数据框中具有不同的列名作为输入。
到目前为止,我一直在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中实现这种并行化吗?输入是数据框的行,输出是需要合并在一起的数据框的行。
非常感谢
致谢
亚历克斯
答案 0 :(得分:1)
您可以在Python多处理中使用 Pool 对象。
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)