多重处理,特定顺序
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()
我有问题要问你们。
所以,我的目标是启动 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()