什么是最有效的Python睡眠方式?

时间:2016-07-05 13:56:58

标签: python performance select time sleep

什么会更好?

time.sleep(delayTime)

select.select([],[],[],delayTime)

他们是等同的吗?选择更有效率吗?

3 个答案:

答案 0 :(得分:3)

答案取决于你想要达到的目标:

time.sleep(delayTime)
  • 操作:暂停执行当前线程达到给定的秒数。
  • 任何捕获的信号将在执行该信号的捕获程序后终止sleep()
select.select([],[],[],delayTime)

这是Unix select()系统调用的简单接口。前三个参数是“等待对象”的序列:

  • rlist :等到准备好阅读
  • wlist :等到准备好写作
  • xlist :等待“异常情况”

现在,我们理解了两个界面,我们可以理解答案取决于目的:
如果您只想暂停当前线程 - 第一个选项更简单。但是如果有对象要等待 - 使用第二种方法。 在效率的温度下 - 如果你所寻找的只是最简单的用例(只是暂停主线程),我认为不存在差异。

答案 1 :(得分:2)

使用调用timeit来训练python中的测试非常简单,但我喜欢ipython进行快速测试(http://ipython.org/)。这是我的结果:

$ ipython
import time,select

%timeit time.sleep(0)
1000000 loops, best of 3: 655 ns per loop

%timeit select.select([],[],[],0)
1000000 loops, best of 3: 902 ns per loop

但是如果你没有访问ipython,并且更喜欢命令行中的本地timeit

$ python -m timeit -s "import time,select" "time.sleep(0)"
1000000 loops, best of 3: 0.583 usec per loop

$ python -m timeit -s "import time,select" "select.select([],[],[],0)"
1000000 loops, best of 3: 0.777 usec per loop

答案 2 :(得分:1)

您如何定义效率?在大多数情况下,睡眠和选择一直用于观察是否有空间/缓冲区。如果空间不可用,那么我们可以选择等待,看看缓冲区何时为空,我们可以执行我们的操作。 sleep()内部选择()。所以,我认为这对你感到满意很重要,我想。