有关于使语句并行化和许多包可用(多处理,joblib等)的讨论,我不能让这个函数并行工作。我有一个完全并行的功能,其中处理顺序根本不重要。该函数是一个外部C程序。除了一个S [RFmap,i]之外,每次迭代的所有输入保持不变,因此这个值的子集是必须迭代的,以及输出FEUPnL [i,:]。似乎多处理包应该能够在调用函数之前不必创建每个迭代。我能想象的是我的初始设置有问题。逻辑告诉我S [RFmap,i]应该是我在多处理中迭代的东西,并且可能必须改变FEUPnL [i,:]输出以接受非索引结果 - 任何有经验的人请告知:
#original for loop
for i in range(0, 1000):
FEUPnL[i,:] = Cfunction('p', FEU_callput, S[RFmap,i].tolist(), FEU_vol, FEU_strike, FEU_texpiry, FEU_IR, FEU_premium)
return FEUPnL
#version 1 attempt at parallel
from joblib import Parallel, delayed
import multiprocessing
num_cores = multiprocessing.cpu_count()
FEUPnL[i,:] = Parallel(n_jobs=num_cores)(delayed(Cfunction('p', FEU_callput, S[RFmap,i].tolist(), FEU_vol, FEU_strike, FEU_texpiry, FEU_IR, FEU_premium) for i in range(1000)))
pickle.dumps(功能) TypeError:不能腌制生成器对象
我单独尝试过多处理:
#version 2 attempt at parallel
from multiprocessing.dummy import Pool as ThreadPool
i=np.arange(0,1000)
pool = ThreadPool(4)
pool.map(Cfunction('p', FEU_callput, S[FEU.RFmap.values,i].tolist(), FEU_vol, FEU_strike, FEU_texpiry, FEU_IR, FEU_premium),i)
pool.close
pool.join
IndexError:形状不匹配:索引数组无法与形状一起广播(13410,)(1000,) 好吧,一个更明显的是,S [FEU.RFmap.values,i]的i索引不能将1000长度i索引给它(但是这个索引需要从S获得并行的正确输入跑)。即使我尝试使用硬编码1(这会杀死我的预期功能),我也会收到错误:
文件" C:\ Anaconda3 \ lib \ multiprocessing \ pool.py",第44行,在mapstar中 返回列表(map(* args))
TypeError:' tuple'对象不可调用。
最后,我尝试过这些方法无济于事:https://www.binpress.com/tutorial/simple-python-parallelism/121 有经验的人,请协助!
#a guess where a fix may be needed, 'ITERABLE' is the S[RFmap,i] value I'm trying to insert
from multiprocessing.dummy import Pool as ThreadPool
pool = ThreadPool(4)
pool.map(Cfunction('p', FEU_callput, `ITERABLE`, FEU_vol, FEU_strike, FEU_texpiry, FEU_IR, FEU_premium), S[RFmap,i].tolist())