python 中是否有可能有一个公平的信号量,它可以保证阻塞线程按照它们调用的顺序解除阻塞acquire()
?
您可能必须用其他活动部件来构建一个。例如,创建一个Queue.Queue()
每个听众都会发布一个全新的Event()
然后它会等待。当需要唤醒其中一个等待线程时,弹出队列中等待时间最长的项目 - 它将成为这些事件对象之一 - 并通过释放线程event.set()
.
显然,您也可以在每个等待进程中使用信号量,但我喜欢信号量的语义Event
因为它显然只能发生一次,而信号量的语义是它的值可以支持许多等待线程。
设置系统:
import Queue
big_queue = Queue.Queue()
然后,等待:
import threading
myevent = threading.Event()
big_queue.put(myevent)
myevent.wait()
并释放等待线程之一:
event = big_queue.get()
event.set()
我认为这种方法的弱点在于,执行设置/释放的线程必须等待等待线程出现,而真正的信号量即使没有人在等待,也会让多个释放继续进行?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)