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很好的答案和使用更高級別的線程工具來推斷互斥的一個很好的例子。 –