python2.7中的多处理模块导致一些问题

时间:2012-06-01 07:00:11

标签: python multiprocessing

我在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]。怎么可能。?

1 个答案:

答案 0 :(得分:1)

全局变量在多个进程之间共享;您只在子流程中操作全局列表,父流程将不会看到更改。

查看documentation on sharing state有关如何在进程间传递信息的选项。您可能希望Manager实例共享您的列表。