代码之家  ›  专栏  ›  技术社区  ›  pistacchio

python中的非阻塞等待

  •  9
  • pistacchio  · 技术社区  · 16 年前

    永远

    while 1:
        pass
    

    然而,这将消耗不公平的CPU进程。添加短消息 sleep 工作原理:

    import time
    while 1:
        time.sleep(0.01)
    

    有没有最好或更干净的方法?

    4 回复  |  直到 5 年前
        1
  •  10
  •   detly    16 年前

    考虑到相当奇怪的需求(一个永远不使用太多CPU的进程),这是相当紧凑的:

    import threading
    dummy_event = threading.Event()
    dummy_event.wait() 
    

    ……然而,我担心我会屈服于诱惑,去解决你的Y而不是你的X。

    除此之外,如果您的平台不提供 threading 模块。如果你想用 dummy_threading dummy_event.wait() 马上回来。

    更新: wait() 上的方法 Popen objects ,或 join() 上的方法 Process os.waitpid() .

        2
  •  3
  •   Philipp    16 年前

    不要用忙碌的等待。根据您正在等待的内容,请使用操作系统的阻塞等待功能之一,例如。 select WaitForSingleObject / WaitForMultipleObjects 在窗户上。

        3
  •  2
  •   drxzcl    16 年前

    如果您依赖此脚本执行定期维护,请使用cron(UNIX)或scheduled tasks(Windows)。

    如果要等待子流程完成,请使用 os.waitpid .

    如果要等待文件系统活动,请使用 pyinotify .

        4
  •  2
  •   San Jacinto    16 年前

    睡很短时间有什么问题?对于现代计算机来说,1毫秒几乎是永恒的。如果你没有几千个这样的线程(听起来好像你没有),那么在循环中的每一次迭代中睡眠一、十、一万或一千万毫秒也没有什么错。CPU甚至不会注意到这个小问题。