Вопрос-Ответ

How do I make a time delay? [duplicate]

Как мне установить временную задержку?

Как мне установить временную задержку в скрипте Python?

Переведено автоматически
Ответ 1

Это задерживает на 2,5 секунды:

import time

time.sleep(2.5)

Вот еще один пример, когда что-то запускается примерно раз в минуту:

import time

while True:
print("This prints once a minute.")
time.sleep(60) # Delay for 1 minute (60 seconds).
Ответ 2

Используйте sleep() из time модуля. Он может принимать аргумент с плавающей точкой для разрешения с точностью до секунды.

from time import sleep
sleep(0.1) # Time in seconds
Ответ 3

Как я могу сделать временную задержку в Python?


В одном потоке я предлагаю функцию sleep:

>>> from time import sleep

>>> sleep(4)

Эта функция фактически приостанавливает обработку потока, в котором она вызывается операционной системой, позволяя другим потокам и процессам выполняться, пока она находится в спящем режиме.

Используйте его для этой цели или просто для задержки выполнения функции. Например:

>>> def party_time():
... print('hooray!')
...
>>> sleep(3); party_time()
hooray!

"ура!" печатается через 3 секунды после нажатия Enter.

Пример использования sleep с несколькими потоками и процессами

Опять же, sleep приостанавливает ваш поток - он использует почти нулевую вычислительную мощность.

Для демонстрации создайте подобный скрипт (я впервые попробовал это в интерактивной оболочке Python 3.5, но подпроцессы по какой-то причине не могут найти party_later функцию):

from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor, as_completed
from time import sleep, time

def party_later(kind='', n=''):
sleep(3)
return kind + n + ' party time!: ' + __name__

def main():
with ProcessPoolExecutor() as proc_executor:
with ThreadPoolExecutor() as thread_executor:
start_time = time()
proc_future1 = proc_executor.submit(party_later, kind='proc', n='1')
proc_future2 = proc_executor.submit(party_later, kind='proc', n='2')
thread_future1 = thread_executor.submit(party_later, kind='thread', n='1')
thread_future2 = thread_executor.submit(party_later, kind='thread', n='2')
for f in as_completed([
proc_future1, proc_future2, thread_future1, thread_future2,]):
print(f.result())
end_time = time()
print('total time to execute four 3-sec functions:', end_time - start_time)

if __name__ == '__main__':
main()

Пример вывода из этого скрипта:

thread1 party time!: __main__
thread2 party time!: __main__
proc1 party time!: __mp_main__
proc2 party time!: __mp_main__
total time to execute four 3-sec functions: 3.4519670009613037

Многопоточность

Вы можете вызвать функцию для последующего вызова в отдельном потоке с помощью объекта Timer threading:

>>> from threading import Timer
>>> t = Timer(3, party_time, args=None, kwargs=None)
>>> t.start()
>>>
>>> hooray!

>>>

Пустая строка показывает, что функция выводила данные в моем стандартном выводе, и мне пришлось нажать Enter, чтобы убедиться, что я попал в запрос.

Плюсом этого метода является то, что пока Timer поток ожидал, я мог делать другие вещи, в данном случае, нажимая Enter один раз - перед выполнением функции (см. Первое пустое приглашение).

В многопроцессорной библиотеке нет соответствующего объекта. Вы можете создать его, но, вероятно, он не существует по какой-то причине. Подпоток имеет гораздо больше смысла для простого таймера, чем целый новый подпроцесс.

Ответ 4

Задержки также могут быть реализованы с помощью следующих методов.

Первый метод:

import time
time.sleep(5) # Delay for 5 seconds.

Вторым методом задержки было бы использование неявного метода wait:

 driver.implicitly_wait(5)

Третий метод более полезен, когда вам приходится ждать, пока не будет выполнено определенное действие или пока не будет найден элемент:

self.wait.until(EC.presence_of_element_located((By.ID, 'UserName'))
python