我正在嘗試在 Python 中使用信號量來阻止執行緒的執行,并根據某些條件(在我的情況下通過 tcp 接收一些內容)在另一個執行緒中釋放信號量。
但它不起作用,我的主執行緒并沒有像我那樣被阻塞。我的最小示例:
import time
from threading import Thread, Semaphore
class ServerManager():
sem = Semaphore()
def run(self):
time.sleep(15)
self.sem.release()
manager = ServerManager()
thread = Thread(target = manager.run)
thread.start()
manager.sem.acquire()
print("I am here immediately but should not")
該訊息會立即在控制臺中列印,但在我的示例中應僅在 15 秒后列印。我確定我做錯了什么,但是什么?
uj5u.com熱心網友回復:
您需要閱讀有關threading.Semaphore. 當執行緒嘗試acquire并且計數器為 0 時,信號量會阻塞。當您創建 aSemaphore時,默認計數為 1,因此您acquire可以立即成功。我懷疑你想要
sem = Semaphore(0)
所以資源立即不可用。
uj5u.com熱心網友回復:
Tim Roberts 的回答是對的。我閱讀了 Python 檔案,但我不明白。我(錯誤地)認為默認值具有我想要的行為。完整的代碼是:
我應該做:
import time
from threading import Thread, Semaphore
class ServerManager():
sem = Semaphore(0)
def run(self):
time.sleep(15)
self.sem.release()
manager = ServerManager()
thread = Thread(target = manager.run)
thread.start()
manager.sem.acquire()
print("I am here immediately but should not")
訊息在 15 秒后列印。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/424581.html
