我在python2.7中使用多处理模块,发现它有一些问题,目前我不知道如何解决它。
我使用的示例代码如下: -
from multiprocessing import Pool
def func_eachcol(col_index):
global list_of_lists
for row in xrange(list_of_lists):
list_of_lists[row][col_index] = 'Update Value'
class C1:
def func_callmultiprocess(self):
global list_of_lists
col_len = len(cols)
pool = Pool(col_len)
for col in xrange(col_len):
pool.apply_async(func_eachcol, args=(col))
pool.close()
pool.join()
print list_of_lists
基本上,我正在做的是在每个col上我打开一个新进程,并遍历list_of_lists的每一行,然后在那一行上更新col,就在那个进程中。
我在这里看到的问题是,在多处理结束后,我看不到更新的list_of_lists,实际上它是旧的list_of_lists。
但是当我看到,在multiprocess_function(func_eachcol)中,我可以看到在该索引(row,col)中更新的值。
请为此问题提供一些补救措施。
添加了一个代码,简化了我想要实现的目标
from multiprocessing import Pool
def func_eachcol(col_index):
print "Hello",
global list
print list,
list[col_index] = -list[col_index]
print list
class C1:
def func_callmultiprocess(self):
global list
list = [1,2,3]
col_len = len(list)
pool = Pool(col_len)
for col in xrange(col_len):
pool.apply_async(func_eachcol, args=(col,))
pool.close()
pool.join()
print list
c = C1()
c.func_callmultiprocess()
**Ouput**
Hello [1, 2, 3] [-1, 2, 3]
Hello [1, 2, 3] [1, -2, 3]
Hello [1, 2, 3] [1, 2, -3]
[1, 2, 3]
基本上我想要的输出到底是[-1,-2,-3]。怎么可能。?
答案 0 :(得分:1)
全局变量不在多个进程之间共享;您只在子流程中操作全局列表,父流程将不会看到更改。
查看documentation on sharing state有关如何在进程间传递信息的选项。您可能希望Manager
实例共享您的列表。