Python 怎么优雅地不断检查一个变量是否有值?

2020-04-10 17:26:32 +08:00
 Te11UA

如下例子,因为实时性要求高,需要断检查 val 是否存在值,val 的值会在其它线程中改变,用 while 循环会导致 CPU 飞起,加了 time.sleep 实时性又不够强,所以想问下,还有什么方式可以达到我想要的效果呢?

val = None
while True:
    if val:
        print('ok, you got val')
    else:
        time.sleep(0.1)
2109 次点击
所在节点    Python
13 条回复
ferock
2020-04-10 17:27:50 +08:00
思路感觉就歪了
Jooooooooo
2020-04-10 17:28:31 +08:00
其它地方变更了之后通知
tomczhen
2020-04-10 17:29:15 +08:00
典型 xy 问题。
Te11UA
2020-04-10 17:29:39 +08:00
@ferock 是的,我也感觉歪了……应该要收到通知
@Jooooooooo 那么该怎么进行通知呢?
hallDrawnel
2020-04-10 17:29:50 +08:00
建议使用条件变量
Jooooooooo
2020-04-10 17:31:40 +08:00
@Te11UA 提供一个方法只要有变更就调用啊
SleipniR
2020-04-10 17:32:03 +08:00
Queue 不香吗?
pmispig
2020-04-10 17:32:26 +08:00
写一个改值函数,改值必须用这个函数,在这个函数里通知你。
不然它随便改了,你要监听,那基本上就是歪路
Te11UA
2020-04-10 17:32:34 +08:00
@hallDrawnel 懂了,感谢~
@Jooooooooo 谢谢~我好像知道该怎么做了
liulei281
2020-04-10 17:33:01 +08:00
threading.Condition
em70
2020-04-10 17:34:00 +08:00
异步应该用回调函数啊
oahebky
2020-04-10 17:34:31 +08:00
“val 的值会在其它线程中改变”

去了解一下 python 的 event 。
ClericPy
2020-04-10 17:43:49 +08:00
我在实际使用中用的是内置库里那个 Future......

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/661240

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX