Python不会写入数组

时间:2016-04-23 15:41:54

标签: python arrays python-multiprocessing

我有一个作业,其中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

1 个答案:

答案 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}}