我一直在使用多处理API,无法弄清楚为什么我在CPU绑定的代码上使用ProcessPoolExecutor时为什么我的代码运行速度较慢。出于某种原因,尽管代码不受I / O限制,但多线程比多处理要快得多,尽管顺序仍然是最快的。
我需要遍历不同元素(交易)的列表,并遍历其他3个列表(list_ois_curves_direction,list_dual_curves_directional,list_basis_curves_directional)。为此,我在for循环中使用了executor.map。有更好的编程方法吗?任何反馈将不胜感激,我已经努力了一段时间。 谢谢
这就是我想要做的:
def risks_parallel(trade, list_ois_curves_directional, list_dual_curves_directional, list_basis_curves_directional):
MtM_result = pricer_engine(trade[0], trade[1], trade[2], trade[3], trade[4], trade[5], trade[6], trade[7], list_dual_curves_directional, list_ois_curves_directional, trade[10], trade[11], trade[12])
return MtM_result
def executor_function(trades):
if __name__ == '__main__':
with concurrent.futures.ProcessPoolExecutor() as executor:
for trade in trades:
# Run the risks in parallel for each trade
results = executor.map(risks_parallel, repeat(trade), list_ois_curves_directional, list_dual_curves_directional, list_basis_curves_directional)
return