使用线程等待类变量更改

2024-06-16 13:00:48 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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循环中。从现在开始,我应该在这里使用线程和/或事件。然而,我不知道在这种情况下实现线程的最佳方式是什么。有人能帮忙吗?在


Tags: 函数代码selffalsetruetimevardef
1条回答
网友
1楼 · 发布于 2024-06-16 13:00:48

考虑使用multiprocessingQueue,就像@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()

输出

^{pr2}$

相关问题 更多 >