我之前已经通过多处理实现了程序,但是现在我正在使用Numba,因此我想删除多处理。但是,我遇到了一些问题。 该程序的部分在此处给出,我使用的是使用Python 2.7的spyder版本3.2.8。
theta = 0
sin_theta = math.sin(math.radians(theta))
多重处理实现如下
dataset = []
for i in range(0, 375, 15):
for j in range(0, 195, 15):
for k in range(0, 375, 15):
dataset.append([i, j, k])
agents = 40
chunksize = 4
pool = mp.Pool(processes = agents)
result = pool.map(calling, dataset, chunksize)
按如下所示删除多处理后
import os
dataset = []
for i in range(0, 375, 15):
for j in range(0, 195, 15):
for k in range(0, 375, 15):
dataset.append([i, j, k])
calling(dataset)
通话功能是
def calling(dataset):
l1 = dataset[0]
l2 = dataset[1]
l3 = dataset[2]
import random
i = random.sample(range(9000), 1)
t = 0
f = 0
z = 0
global g_r
global g_o
g_o_r = grid_one
global s_a_r, p_l
rt(p_l, l1, l2, l3, i)
rt函数是
def rt(p, f, t, z, i):
import math
import cmath
sin_t = math.sin(math.radians(t))
sin_f = math.sin(math.radians(f))
sin_z = math.sin(math.radians(z))
cos_t = math.cos(math.radians(t))
cos_f = math.cos(math.radians(f))
cos_z = math.cos(math.radians(z))
错误是
sin_t = math.sin(math.radians(t))
TypeError: a float is required
请告知是否需要其他信息或数据。
答案 0 :(得分:0)
您的dataset
是一个列表列表,每个列表包含三个元素。使用多处理并通过dataset
传递pool.map
时,外部列表被迭代,并且三元素内部列表被传递到calling
。
因此,当您这样做时:
l1 = dataset[0]
l2 = dataset[1]
l3 = dataset[2]
l1,l2和l3各自包含一个内部列表的三个元素之一。
现在您直接将dataset
传递给calling
,因此l1,l2和l3保留了dataset
的前三个内部列表,因此基本上您可以传递列表{{1} },[0, 0, 0]
和[0, 0, 15]
降到[0, 0, 30]
,因此出现错误。
要解决此问题,只需像这样调用math.radians()
:
calling