将manager.dict()转换为[[a,b,c],[q,w,e],[e,r,t] .......]形式的元组列表

时间:2017-07-10 08:59:04

标签: python list dictionary parallel-processing multiprocessing

我正在使用多处理来提高我使用的程序的计算速度

manager=Manager()   
parallel_array_sites=manager.dict()
find_sites()
removal()

find_sites函数正常运行

我的删除功能是

global array_sites  
for i in parallel_array_sites:
    array_sites.append(i)

#----not very relevant from here on-----

count = 0
remove_sites = {} # dictionary which contains index to remove sites
for i in range(len(array_sites)):
    remove_sites[i] = 0
for i in range(len(array_sites)): 
    if remove_sites[i]:
        continue   
    for j in range(len(array_sites)):
        if(j > i and remove_sites[j] == 0):
            x = array_sites[i][0] - array_sites[j][0]
            y = array_sites[i][1] - array_sites[j][1]
            z = array_sites[i][2] - array_sites[j][2] 
            r = math.sqrt(x*x + y*y + z*z)
            if(r < (rmin/1.1)):
                count = count + 1
                remove_sites[j] = 1
print "after removel",len(array_sites)
#print remove_sites             

count = 0
for key,val in remove_sites.iteritems():
    if(val == 1):
        del array_sites[key-count]
        count = count + 1

删除功能要求我使用

中存储的元组

parallel_array_sites

作为列表中的元组

array_sites

parallel_array_list中的所有对象都是3个元素的元组 条目数量可能相当大,这就是为什么我不想在声明multiprocessing.list()时指定大小。

循环

for i in parallel_array_sites:
    array_sites.append(i)

不起作用并出现以下错误:

File "/usr/lib/python2.7/multiprocessing/managers.py", line 774, in _callmethod
    raise convert_to_error(kind, result)
KeyError: 1081

需要帮助我可以进行任何类型的更改

1 个答案:

答案 0 :(得分:0)

使用

for i in range(len(parallel_array_sites)):
     array_sites.append(parallel_array_sites[i])

因为

for i in parallel_array_sites:

不适用于字典