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