我有一个包含布尔变量的类和一个等待布尔值更改以执行某些代码的函数。一些(相当愚蠢)的例子:
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()
方法显然会在while循环中停留,而等待'让变量改变。从我现在开始,我应该在这里使用线程和/或事件。但是,我不知道为这种示例实现线程的最好方法是什么。有人可以帮忙吗?
答案 0 :(得分:3)
考虑使用像@BlackJack建议的multiprocessing
和Queue
。它更容易使用,尤其是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.