【发布时间】:2016-05-19 17:42:11
【问题描述】:
我正在尝试让信号量在 python 中工作,但由于某种原因,它们不会像我希望的那样工作。 我希望他们一次打印一个数字,例如:
sem1: 1
wait
sem2: 2
wait
sem1: 3
wait
sem2: 4
但输出是这样的:
sem1: 1
sem2: 2
wait
sem1: 3
sem2: 4
这是我的代码:
import os, multiprocessing, time
sem1 = multiprocessing.Semaphore(1)
sem2 = multiprocessing.Semaphore(0)
pid1 = os.fork()
pid2 = -1
if pid1 != 0:
pid2 = os.fork()
for i in range(1,20):
if (i%2) == 1 and pid1==0:
sem1.acquire()
print("sem1: %d" %i)
sem2.release()
time.sleep(1)
elif (i%2) == 0 and pid2==0:
sem2.acquire()
print("sem2: %d" %i)
sem1.release()
time.sleep(1)
我的想法有错吗?
【问题讨论】:
-
他们不一起等吗?就像
time.sleep只会让一个进程休眠,所以他们都会先执行第一步然后等待,然后都执行第二步然后等待.... -
你为什么使用
os.fork?您不应该使用multiprocessing模块的工具来创建流程吗?文档没有说明multiprocessing模块如何与手动分叉交互。
标签: python multiprocessing semaphore