首页 > 解决方案 > 在 Python 中,在从另一个线程读取变量时从一个线程为变量分配一个新值是否安全?

问题描述

我有一个简短的脚本(如下),其中一个线程不断检查变量的状态(如果它是 None 或不是)。这种方法在不使用锁的情况下是否安全,或者检查线程是否有可能读取“None 和新值的引用之间的一些奇怪的东西”?

谢谢你的回答,马丁

import time
import threading


class A(object):
    def __init__(self):
        self.data = None

        self.e = threading.Event()
        self.e.set()

        self.checking_thread = threading.Thread(target=self.__check_if_not_none)
        self.checking_thread.start()

    def __check_if_not_none(self):
        while self.e.is_set():
            if self.data is not None:
                print("Ready")
            else:
                print("None")

    def prepare_data(self):
        data = []
        data.extend([1, 2, 3, 4, 5])  # Data preparing...
        self.data = data

    def quit(self):
        self.e.clear()
        self.checking_thread.join()
        print("Done")


if __name__ == "__main__":
    a = A()
    time.sleep(0.001)
    a.prepare_data()
    time.sleep(0.001)
    a.quit()

标签: pythonthread-safetyvariable-assignment

解决方案


推荐阅读