我试图加快我的原始程序,但是当我查看我的 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 工作者,也没有比原来的程序快。我做错了什么还是有更好的方法通过并行计算来加速这个程序?