等待类变量通过线程更改
我有一个类,这个类里面有一个布尔变量(就是只有真和假两种状态的变量),还有一个函数,这个函数会等待这个布尔变量的值改变,然后再执行一些代码。下面是一个(有点傻的)例子:
import time
class SomeClass():
def __init__(self):
self._var = False
def setVar(self, state):
self._var = state
def waitForVarToChange(self):
while not self._var:
continue
print 'Variable changed'
self._var = False
if __name__ == "__main__":
myclass = SomeClass()
while True:
myclass.waitForVarToChange()
time.sleep(0.5)
myclass.setVar(True)
在这个例子中,waitForVarToChange()
方法会在一个循环里一直“等待”,直到这个变量的值发生变化。根据我所知道的,我应该在这里使用 线程 和/或 事件。不过,我对如何为这样的例子实现一个线程并没有什么头绪。有没有人能帮帮我?
1 个回答
4
可以考虑使用 multiprocessing
和 Queue
,就像 @BlackJack 提到的那样。这种方式更容易操作,特别是 Pool
对象。
这里有一个多线程的解决方案。一个线程启动后,等待一段时间,然后设置一个线程安全的 Event
对象。第二个线程在等待这个 Event
,当事件被触发后,它会打印一条消息并退出。
源代码
import threading, time
def flagger_thread(event):
time.sleep(2)
event.set()
def waiter_thread(event):
print("Waiting for event")
if event.wait(5):
print("event set.")
else:
print("Timed out.")
stop_event = threading.Event()
threading.Thread(target=flagger_thread, args=[stop_event]).start()
threading.Thread(target=waiter_thread, args=[stop_event]).start()
for t in threading.enumerate():
if t != threading.current_thread():
t.join()
输出结果
Waiting for event
event set.