r.v*_*r.v 6 python synchronization semaphore
是否有可能在python中有一个公平的信号量,一个保证阻塞线程按他们调用的顺序解锁acquire()?
您可能必须从其他移动部件构建一个.例如,创建一个Queue.Queue()每个监听器发布一个全新的Event()服务器,然后等待它.当需要唤醒其中一个等待线程时,弹出队列中等待时间最长的项目 - 它将是其中一个事件对象 - 并释放该线程event.set().
显然,你也可以在每个等待进程中使用一个信号量,但我喜欢它的语义,Event因为它只能发生一次,而信号量的语义是它的值可以支持许多等待的线程.
要设置系统:
import Queue
big_queue = Queue.Queue()
Run Code Online (Sandbox Code Playgroud)
然后,等待:
import threading
myevent = threading.Event()
big_queue.put(myevent)
myevent.wait()
Run Code Online (Sandbox Code Playgroud)
并释放一个等待线程:
event = big_queue.get()
event.set()
Run Code Online (Sandbox Code Playgroud)
我认为这种方法的弱点在于执行set/release的线程必须等待等待的线程出现,而真正的信号量会让几个版本继续进行,即使没有人在等待吗?
| 归档时间: |
|
| 查看次数: |
1388 次 |
| 最近记录: |