Python中是否可以有一个公平的信号量,它可以保证阻塞线程按照他们所谓的acquire()
的顺序被解除阻塞?Python中的公平信号量
4
A
回答
5
您可能需要从其他运动部件构建一个。例如,创建一个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()
我想的弱点这种方法是,执行set/release的线程必须等待一个等待的线程出现,而一个真正的semap即使没有人等待,Hore会让几个发布进行下去吗?
0
利用具有布兰登解决“公平旗语”的问题,它可能是看的障碍,一个候车点线程到达,然后在同一时间发布了相关的问题很有用:http://docs.python.org/py3k/whatsnew/3.2.html#threading
+0
谢谢你 –
相关问题
- 1. 信号量公平设置
- 2. java中的公平信号量
- 3. 信号量级中的公平设置
- 4. POSIX线程和公平(信号量)
- 5. 信号量公平性参数不遵循先入先出
- 6. Java - 如何修改信号量实现,以便公平
- 7. Python上的信号量
- 8. 在Python中命名的信号量?
- 9. Python中信号量的奇怪错误
- 10. Python:构建可重入信号量(结合RLock和信号量)
- 11. 在Python中清理信号量
- 12. 信号量:我在哪里学习许可,公平,趸船等基本概念
- 13. C中设置的信号量的最大信号量数
- 14. NSOperationQueues中的信号量
- 15. C++中的信号量
- 16. 私人/公共qt信号
- 17. EMG信号中的平均幅度值
- 18. python webkit信号
- 19. 变量,“ - ”(减号信号)中的Bash
- 20. fortran的信号量
- 21. Ruby信号量?
- 22. JAVA中的互斥量和信号量?
- 23. 平均周期信号
- 24. Silverlight中没有信号量?
- 25. C - 多信号叉与信号量
- 26. Linux信号量:自旋锁或信号?
- 27. 信号量和R/W信号量之间的性能评估
- 28. python线程模块中信号量的需求
- 29. 重置信号量
- 30. 实现信号量
我们能否没有克服你所说的某种限制?这不可能吗? –
我在想它!出于好奇,为什么 - 如果等待的线程是对称的 - 会有一个“公平”的信号量甚至是可取的吗?随着内存缓存如何在现代操作系统上运行,激活* most *最近活动的线程应该是最有效的,而不是等待时间最长的线程,因此从处理器缓存中有最大的内存块失效甚至从主内存中。是不是一个公平的信号量,因此是反模式? :) –
+1很好的答案和使用更高级别的线程工具来推断互斥的一个很好的例子。 –