我有一个作业,其中5个不同的子进程必须将其编号ID(1到5)写入共享数组。 我设法让我的程序打印出孩子的号码,然而,当我打印出阵列时它出来了。 我的代码出了什么问题?
from multiprocessing import Process, Array, Semaphore
import random, time
import os
LUGARES = 32
barco = Array("i",[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])
mutex = Semaphore(1)
vazio = Semaphore(LUGARES) #Inicialmente, LUGARES (32) posicoes livres
def bilhetes(agencia):
lotacao = 0
while lotacao < LUGARES:
vazio.acquire()
mutex.acquire()
lugar = i + 1
lotacao += 1
barco[lugar] = agencia
print barco[lugar] ,
lugar = (lugar + 1)
mutex.release()
time.sleep(random.randint(0,1))
for i in range(5):
agencia = i + 1
pid = os.fork()
if pid == 0:
bilhetes(agencia)
os._exit(0)
for i in range(0,32):
print barco[i]
示例输出(barco
):
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
预期产出:
54321 5 5 5 5 4 4 4 4 3 3 3 3 2 2 2 2 1 1 1 1 4 5 3 2 1 4 4
答案 0 :(得分:0)
您的代码未使用您导入的Process
,而是使用os.fork()
。
对我来说,这是我第一次看到os.fork()
的一些用法,用它来完成这项工作看起来相当棘手 - 会有多个进程 - 而且这些进程没有共享访问变量所以你必须对它们之间的数据进行序列化和反序列化。
更好地使用具有出色API的multiprocessing
用于此目的,我建议您从Python Module of the Week: Multiprocessing - basics获得非常好的教程,以了解启动/停止进程,然后再学习更高级的Communication between processes Pattern = [0,0,1,0,1,0,1,0,0];
Pattern = reshape(Pattern, 3, 3);
N = 4;
Result = repelem(Pattern, N, N);
3}}