2016-07-05 6 views
2

Что было бы лучше?Какой самый эффективный способ спать в Python?

time.sleep(delayTime)

или

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

ли они эквивалентны? Выбирается более эффективно?

+0

Эффективен на каком ресурсе? –

+0

CPU использование, точность. – edgarstack

+3

Что мешает вам тестировать и сравнивать оба? –

ответ

3

Ответ зависит от того, что вы пытаетесь достичь:

time.sleep (delayTime):

  • Действие: приостановить выполнение текущего потока на заданное количество секунд.
  • Любой пойманный сигнал прервет сон() после выполнения того, что сигнал ловит рутинную

select.select ([], [], [], delayTime):
Это простой интерфейс к системному вызову Unix select(). Первые три аргумента являются последовательности 'waitable объектов':

  • Rlist: ждать, пока готовы для чтения
  • wlist: ждать, пока готовы для записи
  • xlist: ждать «Исключительное условие»

Итак, теперь, когда мы понимаем оба интерфейса, мы можем понять, что Ответ зависит от цели:
Если все, что вы хотите сделать, это приостановить текущий поток - первый вариант проще. Но если есть объект для ожидания - используйте второй метод. В темпе эффективности - я не думаю, что есть различия, если все, что вы ищете, это самый простой вариант использования (просто приостановите основной поток).

1

Довольно просто взломать тест в 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

Как вы определение эффективности? В большинстве случаев сон и выбор используются, чтобы наблюдать, есть ли пространство/буфер. Если пространство недоступно, у нас есть возможность подождать и посмотреть, когда буфер будет пустым, и мы сможем выполнить наше действие. Спящий режим() внутренне выбирает(). Поэтому, я думаю, это важно, с чем вам удобно, я думаю.

Смежные вопросы