Python 为什么我的var值不';不改变,不沟通?
我有一个Python程序来创建两个数组,将它们相乘,并将相乘的结果相加 这是通过过程完成的 如果我创建两个进程,程序将创建两个具有两行两列的数组。 他们应该更改全局varPython 为什么我的var值不';不改变,不沟通?,python,matrix,process,pipe,semaphore,Python,Matrix,Process,Pipe,Semaphore,我有一个Python程序来创建两个数组,将它们相乘,并将相乘的结果相加 这是通过过程完成的 如果我创建两个进程,程序将创建两个具有两行两列的数组。 他们应该更改全局varresultado的值 但是,正如您在代码中的注释中所看到的,第二个进程错误地接收到varresultado的值 可能是什么 程序的某些部分已被隐藏 resultado = [] def multiplicacao(pipe_filho): if flag: sem.acquire() glo
resultado
的值
但是,正如您在代码中的注释中所看到的,第二个进程错误地接收到varresultado
的值
可能是什么
程序的某些部分已被隐藏
resultado = []
def multiplicacao(pipe_filho):
if flag:
sem.acquire()
global resultado
# print resultado -->
# Process 1: [] (Correct) ;
# Process 2: [] (Incorrect should be [[47, 6]])
myVar = productMatrix(A[e], B)
resultado += myVar
# print resultado -->
# Process 1: [[47, 6]] (Correct) ;
# Process 2: [[36, 127]] (Correct)
for i in range(len(myVar)):
for j in range(len(myVar[i])):
soma.value += myVar[i][j]
pipe_filho.send(myVar)
if flag:
sem.release()
pipe_filho, pipe_pai = Pipe()
for i in range(2):
e = i
newP = Process(target=multiplicacao, args=(pipe_filho,))
newP.start()
myVar = pipe_pai.recv()
for i in range(2):
newP.join()
# printMatrix(resultado) -->
# | 36 95 | (Incorrect should be | 36 95 36 127 | )
进程之间不共享全局变量。因此,我不知道你期望这是怎么回事。我没有一个真正的答案,但我看到你只是加入了上一个
newP
过程(两次)。的第一个将创建一个进程
,将其分配给newP
,然后它将创建第二个进程并将其分配给相同的newP
。您的第二个for
将join()
第二个newP
两次(但此时您丢失了对第一个newP
的引用)此外,进程不共享内存(线程会)。也许你想用线?或者将全局resultado
放入管道中?(我不能完全理解代码,但是…我的坏:-()