假设我有一个空列表my_list
和5个进程pr1, pr2, pr3, pr4, pr5
,其中每个进程都会在我的列表中添加一些内容。
我的问题是:这样的事情可能吗?它会表现正常还是会发生错误?
答案 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)]
。