我有两个函数func_1
和func_2
。它们都接受一个整数数组作为输入。
我有一个循环,在第i
次迭代中创建长度为i
的数组。
我有两个预定义的列表list_1
和list_2
,用于存储每次迭代时函数的输出。
因此,对于每次迭代,我希望并行运行两个函数,并将迭代中创建的数组作为输入。CPython没有真正的多线程,所以我使用multiprocessing
。
我想在循环的每次迭代中为每个函数创建两个独立的进程,并在迭代结束时创建close
进程。
到目前为止,我已经尝试使用Pool
和Process
。我无法让它们填充list_1
和list_2
,即使通过将这两个列表作为参数发送给各自的函数,并将结果附加到函数中。
我如何做到这一点?将理解解释。
P.S.这是我实际代码的一个(非常)简化版本。
以下是我所做的不起作用的:
import random
import multiprocessing as mp
list_1 = []
list_2 = []
for input in range(n):
arr_1 = [random.randint(0,100) for _ in range(input)]
arr_2 = list(arr_1)
proc_one = mp.Process(target=func_1, args=(arr_1, list_1)
proc_two = mp.Process(target=func_2, args=(arr_2, list_2)
proc_one.start()
proc_two.start()
proc_one.join()
proc_two.join()
print(list_1)
print(list_2)
下面是两个函数:
def func_1(in, out):
# do something with in
# store the value in result
out.append(result)
def func_2(in, out):
# do something differnt with in
# store the value in result
out.append(result)
1条答案
按热度按时间uz75evzq1#
如果CPython不是强制性的,你可以使用python的多处理库。我认为这个方法可以和CPython一起工作。
创建共享队列
启动池中的进程,将共享队列作为参数传递,并传递您的数据
在进程端,您还应该在init函数中创建对共享队列的引用
进程间共享状态
尝试使用文档或管理器中所述的Value和Array对象
下面是使用Array的代码示例
这个应该能打印出这样的东西