python - 在 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()
解决方案
推荐阅读
- reactjs - React 在页面刷新时重定向到主页
- google-apps-script - 如何导出为 pdf,然后仅通过电子邮件发送我的 Google 表格文件的一个选项卡?
- php - wordpress 更新后,我的网站上出现 forreach 错误
- python - Cython 中带有自定义比较器的优先级队列
- javascript - 当我映射到一组对象时,如何突出显示多个项目?
- debugging - 在设置时使用 digitalRead 功能
- spring - Spring JOOQ - 从控制台中删除获取的结果
- css - 如何为媒体查询创建一个名为 @phone 的变量?
- java - 我们如何创建包含应用程序包的战争文件?
- asp.net-core-mvc - 如何在剃须刀页面中使用 PageRemote