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




консоли ожидание (11)

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


Answers

import time
time.sleep(5)   # Delays for 5 seconds. You can also use a float value.

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

import time
while True:
    print("This prints once a minute.")
    time.sleep(60) # Delay for 1 minute (60 seconds).

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

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()

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

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

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


Задержки выполняются с помощью библиотеки времени , в частности функции time.sleep() ...

Чтобы заставить его подождать секунду:

from time import sleep
sleep(1)

Это работает, потому что:

from time import sleep

вы извлекаете time.sleep() только из библиотеки времени, что означает, что вы можете просто вызвать ее с помощью:

sleep(seconds)

вместо того, чтобы печатать

time.sleep()

который неудобно долго набирать.

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

Выполнение from [library] import [function] (, [function2]) отлично, если вы просто хотите определенные части модуля.

Вы также можете сделать это как

import time
time.sleep(1)

и у вас будет доступ к другим функциям библиотеки времени, например time.clock() пока вы вводите time.[function]() , но вы не можете создать переменное время.


Немного веселья с сонным generator .

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

Задержка, измеренная с последнего раза (просыпается регулярно)

Ситуация может заключаться в том, что мы хотим делать что-то как можно last_time , и мы не хотим беспокоиться о всех last_time , next_time за нашим кодом.

Генератор зуммера

Следующий код ( sleepy.py ) определяет генератор buzzergen :

import time
from itertools import count

def buzzergen(period):
    nexttime = time.time() + period
    for i in count():
        now = time.time()
        tosleep = nexttime - now
        if tosleep > 0:
            time.sleep(tosleep)
            nexttime += period
        else:
            nexttime = now + period
        yield i, nexttime

Вызов регулярного buzzergen

from sleepy import buzzergen
import time
buzzer = buzzergen(3) # Planning to wake up each 3 seconds
print time.time()
buzzer.next()
print time.time()
time.sleep(2)
buzzer.next()
print time.time()
time.sleep(5) # Sleeping a bit longer than usually
buzzer.next()
print time.time()
buzzer.next()
print time.time()

И запустив его, мы видим:

1400102636.46
1400102639.46
1400102642.46
1400102647.47
1400102650.47

Мы также можем использовать его непосредственно в цикле:

import random
for ring in buzzergen(3):
    print "now", time.time()
    print "ring", ring
    time.sleep(random.choice([0, 2, 4, 6]))

И запустив его, мы увидим:

now 1400102751.46
ring (0, 1400102754.461676)
now 1400102754.46
ring (1, 1400102757.461676)
now 1400102757.46
ring (2, 1400102760.461676)
now 1400102760.46
ring (3, 1400102763.461676)
now 1400102766.47
ring (4, 1400102769.47115)
now 1400102769.47
ring (5, 1400102772.47115)
now 1400102772.47
ring (6, 1400102775.47115)
now 1400102775.47
ring (7, 1400102778.47115)

Как мы видим, этот зуммер не слишком жесткий и позволяет нам догнать регулярные сонные интервалы, даже если мы проспали и вышли из обычного графика.


Есть 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')

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

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

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

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

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

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

 driver.implicitly_wait(5)

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

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

Прочтите 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


В то время как все остальные предложили модуль time де-факто, я подумал, что поделюсь другим методом с использованием функции matplotlib от pyplot , pause .

Пример

from matplotlib import pyplot as plt
plt.pause(5)    # Pauses the program for 5 seconds

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

Это позволит вам import если вы уже импортировали matplotlib .


Часть вторая 1

Решения (продолжение)

Другие подходы:

  1. Использовать Python только как оболочку

    • Все делается с использованием другой технологии
    • Эта технология вызывается из Python
    • Самый известный аромат, который я знаю, - это то, что я называю системным администратором :

      • Используйте Python (или любой язык программирования, если на то пошло), чтобы выполнять команды оболочки (и анализировать их выходы), в общем, этого подхода следует избегать, так как если некоторый формат вывода команды немного отличается между версиями ОС / ароматами, код анализа должен быть адаптированы также, не говоря уже о не EN- локалях)
      • Некоторые считают это аккуратным взломом
      • Я считаю его более похожим на хромое обходное решение ( gainarie ), поскольку действие само по себе выполняется из оболочки ( в этом случае cmd ) и, следовательно, не имеет ничего общего с Python .
      • Фильтрация ( grep/ findstr) или форматирование вывода могут выполняться с обеих сторон, но я не буду настаивать на этом. Кроме того, я сознательно использовал os.systemвместо этого subprocess.Popen.
      (py35x64_test) E:\Work\Dev\\q003207219>"e:\Work\Dev\VEnvs\py35x64_test\Scripts\python.exe" -c "import os;os.system(\"dir /b root_dir\")"
      dir0
      dir1
      dir2
      dir3
      file0
      file1
      

Конец второй части 1


1. В связи с тем, что предел Home (пост / ответ) составляет 30000 символов ( [SE.Meta]: Знание ваших ограничений: какова максимальная длина заголовка вопроса, должности, изображения и ссылок? ), ответ был разделен на 2 части. Обязательно прочтите [SO]: Как я могу перечислить все файлы каталога? (Ответ @ CristiFati - «Часть первая») .





python delay sleep timedelay