0

我试图加快我的原始程序,但是当我查看我的 CPU 统计数据时,只使用了一个工人。我原来的程序:

import pandas as pd
import numpy as np

other_arg=...

def long_duration_function(i,j,other_arg):
    # do some complicated and slow calculations
    if ...:
         result=None
    else:
         result=DataFrame(...)
    return result

df=pd.DataFrame()

for i in range(100):
    for j in range(100):
        df.append(long_duration_function(i,j,other_arg),ignore_index=True)

我认为使用并行化来加速程序可能会更快,所以我开始更改程序。

import pandas as pd
import numpy as np
from pandarallel import pandarallel

pandarallel.initialize()   #returns Pandarallel will run on 8 workers

def long_duration_function(i,j,other_arg):
   # do some complicated and slow calculations
   if ...:
        result=None
   else:
        result=DataFrame(...)
   return result

def parallel_splitter(row,other_arg):
   long_duration_function(row.name%100,row.name//100,other_arg)


df_empty(np.nan,index=range(100*100),columns=[...])
df=df_empty.parallel_apply(parallel_splitter,axis=1,arg=other_arg).dropna(how='all')

出乎我的意料,这个程序没有使用所有的 CPU 工作者,也没有比原来的程序快。我做错了什么还是有更好的方法通过并行计算来加速这个程序?

4

0 回答 0