嗨,由于程序运行时间太长,我正在尝试在多个内核上并行运行一个函数。我找不到具有多个参数的函数的多处理语法。我在下面附上了我的代码,不知道如何修复语法。在
import pandas as pd
import numpy as np
import numpy.random as rdm
import matplotlib.pyplot as plt
import math as m
import random as r
import time
from joblib import Parallel, delayed
def firstLoop(r1, r2, d):
count = 0
for i in range(r1):
for j in range(r2):
if(findDistance(dat1[i, 0], dat2[j, 0], dat1[i, 1], dat2[j, 1]) <= d):
count = count + 1
return count
food1 = range(r1)
atm1 = range(r2)
d = 100
num_cores = multiprocessing.cpu_count()
results = Parallel(n_jobs=num_cores)(delayed(firstLoop)(for i in food1, for j in atm1, d))
我尝试在多个内核上运行firstLoop,其中包含food1和atm1中的所有元素,但不确定程序的语法。在
编辑:
^{pr2}$
对具有多个参数的函数进行多处理的一个简单语法是使用
Pool()
和starmap()
为此,函数
f
必须执行一个基本步骤。在在您的代码中:
^{pr2}$基本步骤是
findDistance(dat1[i, 0], dat2[j, 0], dat1[i, 1], dat2[j, 1]) <= d)
。一个可能的函数f
可以是:然后初始化结果数组和变量:
然后计算你只需要求和数组的和。我没有测试代码,想法就在这里,但是可能需要一些修改,特别是在从map函数返回结果并存储它们的方式上。我不经常使用这种语法,因为我主要是将结果存储在函数多处理末尾的一个文件中。在
也许事先并不需要创造结果。不确定。在
相关问题 更多 >
编程相关推荐