4
如果列表爲空,是否有辦法使線程進入睡眠狀態,並在有項目時再次將其喚醒?我不想使用隊列,因爲我想能夠索引到數據結構中。如果列表爲空,Python塊線程
如果列表爲空,是否有辦法使線程進入睡眠狀態,並在有項目時再次將其喚醒?我不想使用隊列,因爲我想能夠索引到數據結構中。如果列表爲空,Python塊線程
是,該解決方案可能會涉及threading.Condition
變量,你在評論中指出。
沒有更多信息或代碼片段,很難知道哪些API適合您的需求。你如何生產新的元素?你如何消耗它們?在基地,你可以做這樣的事情:
cv = threading.Condition()
elements = [] # elements is protected by, and signaled by, cv
def produce(...):
with cv:
... add elements somehow ...
cv.notify_all()
def consume(...):
with cv:
while len(elements) == 0:
cv.wait()
... remove elements somehow ...
我會去與這樣的:
import threading
class MyList (list):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self._cond = threading.Condition()
def append(self, item):
with self._cond:
super().append(item)
self._cond.notify_all()
def pop_or_sleep(self):
with self._cond:
while not len(self):
self._cond.wait()
return self.pop()
@AkshatMahajan我的錯誤。我的意思是「名單」。 – mrQWERTY
但是,如果我理解正確的話,那麼你需要製作一個循環,要求列表的狀態。或者在設置列表時觸發線程 –
我正在使用條件鎖。如果有效,我會在這裏發佈我的解決方案。 – mrQWERTY