V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Te11UA
V2EX  ›  Python

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

  •  
  •   Te11UA · 2020-04-10 17:26:32 +08:00 · 2109 次点击
    这是一个创建于 1669 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    去了解一下 python 的 event 。
    ClericPy
        13
    ClericPy  
       2020-04-10 17:43:49 +08:00
    我在实际使用中用的是内置库里那个 Future......
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5577 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 06:45 · PVG 14:45 · LAX 22:45 · JFK 01:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.