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




python пауза в консоли (8)

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

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

>>> 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 не могут найти функцию 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

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

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

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

>>> 

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

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

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

Я хотел бы знать, как установить временную задержку в сценарии Python.


Библиотека tkinter в стандартной библиотеке Python представляет собой интерактивный инструмент, который можно импортировать. В принципе, вы можете создавать кнопки и поля, всплывающие окна и прочее, которые отображаются в виде окон, которыми вы управляете с помощью кода.

Если вы используете tkinter, НЕ ИСПОЛЬЗУЙТЕ TIME.SLEEP() потому что это TIME.SLEEP() вашу программу. Это случилось со мной. Вместо этого используйте root.after() и замените значения на сколько секунд, с миллисекундами. Например, time.sleep(1) эквивалентен root.after(1000) в tkinter.

В противном случае, time.sleep() , о чем многие ответы указывают, это путь.


Вы можете использовать функцию sleep() в модуле времени. Он может принимать аргумент float для второго разрешения.

from time import sleep
sleep(0.1) # Time in seconds.

Есть 4 метода, которые я знаю: time.sleep() , pygame.time.wait() , pyplot.pause() и matplotlib's. pyplot.pause() после .after() .

time.sleep() (не использовать при использовании Tkinter):

import time
print('Hello')
time.sleep(5) #number of seconds
print('Bye')

pygame.time.wait() (не рекомендуется, если вы не используете окно pygame, но вы можете немедленно выйти из окна):

import pygame
#If you are going to use the time module
#don't do "from pygame import *"
pygame.init()
print('Hello')
pygame.time.wait(5000)#milliseconds
print('Bye')

Функция pyplot.pause() (не рекомендуется, если вы не используете график, но вы можете немедленно выйти из графика):

import matplotlib
print('Hello')
matplotlib.pyplot.pause(5)#seconds 
print('Bye')

Наконец, метод .after() (лучше всего с Tkinter):

import tkinter as tk #Tkinter for python 2
root = tk.Tk()
print('Hello')
def ohhi():
 print('Oh, hi!')
root.after(5000, ohhi)#milliseconds and then a function
print('Bye')

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

Начнем с самого простого:

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

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

 driver.implicitly_wait(5)

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

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

Лучший способ задержать время в Python - использовать библиотеку time . Как это:

import time
time.sleep(10)

Просто замените 10 на количество секунд, которое вы хотите отложить. Вы можете использовать такие форматы, как '10 .1 ',' 5.07 'и т. Д.

Не рекомендуется использовать это с Tkinter


Прочтите https://web.archive.org/web/20090207081238/http://faqts.com/knowledge_base/view.phtml/aid/2609/fid/378 , что может помочь вам:

Попробуйте функцию сна в модуле времени.

import time
time.sleep(60)

И поставьте это в цикле while, и инструкция будет выполняться только в минуту ... Это позволяет вам запускать инструкцию с предопределенными интервалами независимо от того, сколько времени занимает команда (до тех пор, пока она занимает менее минуты или 5 или 60 или что бы вы ни установили) Например, я хотел запустить пинг один раз в минуту. Если я всего лишь time.sleep(60) или time.sleep(45) даже, пинг не всегда занимает столько же времени. Вот код :)

time.sleep(time.localtime(time.time())[5])

[5] просто вытягивает секунды из возвращаемого значения time.localtime() .

Самое замечательное в time.sleep заключается в том, что он поддерживает числа с плавающей запятой!

import time
time.sleep(0.1) 

http://python.org/doc/current/lib/module-time.html


Это простой пример задержки:

import time

def delay(period='5'):
    # If the user enters nothing, It'll wait 5 seconds
    try:
        #If the user not enters a int, I'll just return ''
        time.sleep(period)
    except:
        return ''

Другой, в Tkinter:

import tkinter

def tick():
    pass

root=Tk()
delay=100 # time in milliseconds
root.after(delay,tick)
root.mainloop()




timedelay