2016-07-05 52 views

回答

3

问题的答案取决于你的努力来实现:

time.sleep(delayTime)

  • 措施:暂停当前线程的执行对于给定秒数。
  • 任何捕获信号将终止睡眠()以下的该信号的捕捉常规

select.select执行([],[],[],delayTime)
这是一个简单的接口到Unix select()系统调用。前三个参数是'可等待对象的序列:

  • 的rlist:等到读就绪
  • wlist:等到准备好写
  • 的Xlist:等待“异常条件”

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

1

非常简单的hackup python中的测试与调用timeit,但我爱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 
1

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

相关问题