等待类变量使用线程更改

时间:2014-07-24 11:18:48

标签: python multithreading

我有一个包含布尔变量的类和一个等待布尔值更改以执行某些代码的函数。一些(相当愚蠢)的例子:

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循环中停留,而等待'让变量改变。从我现在开始,我应该在这里使用线程和/或事件。但是,我不知道为这种示例实现线程的最好方法是什么。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

考虑使用像@BlackJack建议的multiprocessingQueue。它更容易使用,尤其是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.