多重处理,特定顺序

Multiprocessing, specific order

我有问题要问你们。

所以,我的目标是启动 5 个进程。每个人都必须通过一个函数打印他们的名字。最后一件事,不允许任何竞争条件。 我必须用信号量来实现这一切。 执行顺序应该是这样的:

开始 p1 -> p1 结束 -> p2 和 p3 -> p2 和 p3 结束 -> 开始 p4 -> p4 结束 -> p5

这是我目前的情况:

from multiprocessing import Process, Semaphore
import time

def start (processName):
    semaphore.acquire()
    print(processName)
    time.sleep(1)
    semaphore.release()

if __name__ == '__main__':
    semaphoreSize = 1
    semaphore = Semaphore(semaphoreSize)

    p1 = Process (target = start, args= ('Process 1',))
    p2 = Process (target = start, args= ('Process 2',))
    p3 = Process (target = start, args= ('Process 3',))
    p4 = Process (target = start, args= ('Process 4',))
    p5 = Process (target = start, args= ('Process 5',))

    p1.start()
    p2.start()
    p3.start()
    p4.start()
    p5.start()

    p1.join()
    p2.join()
    p3.join()
    p4.join()
    p5.join()

感谢您的帮助!

我的解决方案现在看起来像这样:

def start(processName):
    if processName == 'Process 1':
        semaphore1.acquire()
        print(processName)
        time.sleep(1)
        semaphore2.release()
        semaphore3.release()
    elif processName == 'Process 2':
        semaphore2.acquire()
        print(processName)
        time.sleep(1)
        semaphore4.release()
    elif processName == 'Process 3':
        semaphore3.acquire()
        print(processName)
        time.sleep(1)
        semaphore4.release()
    elif processName == 'Process 4':
        semaphore4.acquire()
        semaphore4.acquire()
        print(processName)
        time.sleep(1)
        semaphore5.release()
    else:
        semaphore5.acquire()
        print(processName)
        time.sleep(1)
        semaphore5.release()