多个进程中的相互列表

时间:2016-08-31 08:09:31

标签: python-2.7 multiprocessing

假设我有一个空列表my_list和5个进程pr1, pr2, pr3, pr4, pr5,其中每个进程都会在我的列表中添加一些内容。

我的问题是:这样的事情可能吗?它会表现正常还是会发生错误?

2 个答案:

答案 0 :(得分:1)

如果这些过程是独立的,那么这样的事情是不可能的。至少没有一些额外的机制,如套接字(这大大增加了复杂性)。

如果这些是通过multiprocessing创建的,my_list只是一个列表,那么每个进程都有自己的列表副本。

如果您将multiprocessing定义为my_list,则再次在multiprocessing.Queue中,那么这将是进程之间的共享结构。

答案 1 :(得分:1)

您的所有5个进程是应用相同的功能,还是应用于不同的输入?如果是这种情况,那么使用Pool.map()中的multiprocessing是合适的:

from multiprocessing import Pool

n_processes = 5 #number of processes to use
input = [0.,1.,2.,3.] #some input

def f(x):
    #the function being applied on each thread
    return x**2. #for example

p = Pool(n_processes)
my_list = p.map(f,input)
p.close() #close the pool now you're finished with it

因此,函数f(x)将应用于每个进程的不同输入,然后将输出收集到一个列表中(相当于您的' my_list'开头为空)。输出数组的排序方式与输入数组相同,即input = [x1,x2,x3,x4,x5]然后output=[f(x1),f(x2),f(x3),f(x4),f(x5)]