Python 多处理,特定顺序
我有个问题要问你们 因此,我的目标是启动5个流程。每个人都必须通过一个函数打印自己的名字。最后一件事,不允许任何比赛条件。Python 多处理,特定顺序,python,multiprocessing,semaphore,Python,Multiprocessing,Semaphore,我有个问题要问你们 因此,我的目标是启动5个流程。每个人都必须通过一个函数打印自己的名字。最后一件事,不允许任何比赛条件。 我必须通过信号量来实现这一切。 执行顺序应如下所示: 开始p1->p1结束->p2和p3->p2和p3结束->开始p4->p4结束->p5 以下是我到目前为止的情况: from multiprocessing import Process, Semaphore import time def start (processName): semaphore.acqui
我必须通过信号量来实现这一切。 执行顺序应如下所示: 开始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()
那么你的问题是什么呢?“我必须用信号量来实现这一切。”信号量本身是不有序的。acquire操作递减计数,如果计数变为零,则阻塞并等待,当计数大于零时返回,所有操作都是原子式的。(一个原子级的版本)他们基本上会告诉你:“资源X仍然可用吗?如果是,拿一个,让我继续,如果不是,等它出现。”那么,你的五个进程可以等待什么资源呢?一个单一的资源(“任何人都可以继续”)就足够了,因为对于谁获得资源没有隐含的顺序?好的,所以信号量本身基本上不可能完成特定的进程执行顺序。但是,在信号量的帮助下,是否有可能得到这样的结果:如果进程1不在队列中(信号量)->将进程设置为睡眠->将另一个进程放入队列以进行检查?鉴于这看起来像是家庭作业,我不打算仅仅给出答案,而是从共享和私有的角度来考虑。你可以/必须设置多少共享的东西来安排五个独立的实体,比如Alice、Bob、Carol、Dave和Ellen,也许要小心地按字母(或数字)顺序轮流?当戴夫说“我做完了,你现在就走”的时候,你怎么能安排事情呢?他具体的意思是艾伦现在可以走了?(如果共享的信号量不止一个或多个,则有多种解决方案。)