Питання Як я можу затримати час роботи в Python?


Я хотів би знати, як встановити час затримки в сценарії Python.


2032
2018-02-04 07:04


походження




Відповіді:


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

2262
2018-02-04 07:05



якщо вам потрібні певні умови. Це краще для користувача threading.Event.wait. - ssj
Ну ... він буде надруковано рідше, ніж це, тому що потрібен час для друку та обробки всіх буферів, що тягне за собою (можливо, зробить контекстний перемикач ядра), і для реєстрації сигналу тривоги, але ... так. Трохи менше раз на хвилину. - Parthian Shot
при використанні tkinter як графічного користувальницького інтерфейсу sleep () не виконуватиме завдання - скористайтеся після () замість: tkinter.Tk.after (yourrootwindow, 60000) або yourrootwindow.after (60000) - DonGru
Спасибі за це не вдалося зрозуміти, що таке сон, дякую ще раз. - harrypotter0
Варто зазначити, що в Windows краща деталізація, яку ви можете сподіватися, становить близько 0,015 секунд (15 мс) точності. Більшість версій Linux на сучасних процесорах можуть зменшувати деталізацію до 0,001 секунди (1 мс). - SDsolar


Ви можете скористатись sleep() функція в модулі часу. Це може займати аргумент float для другорядного дозволу.

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

568
2017-09-15 16:34



Чи є функція для пробудження? - Elfin forest
@ Ellfinforest що ви маєте на увазі? - Neil Chowdhury
Так, але що можна сказати про реальне тимчасове вирішення на різних платформах? Чи є якісь гарантії? Чи може бути роздільна здатність 16,666 мс? - Peter Mortensen


Будь ласка, прочитайте https://web.archive.org/web/20090207081238/http://faqts.com/knowledge_base/view.phtml/aid/2609/fid/378, який може вам допомогти:

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

import time
time.sleep(60)

І поставте це в a while цикл і заява буде виконуватися тільки на   хвилина ... Це дозволяє запускати виписку за заданими інтервалами   незалежно від того, скільки часу команда займає (до тих пір, поки вона займає менше, ніж   хвилину, або 5 або 60, або що б ви не встановили). Наприклад, я хотів   запустити пінг раз на хвилину. Якщо я просто time.sleep(60) або time.sleep(45)    навіть, пинг не завжди займає таку ж кількість часу. Ось іще   код :)

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

The [5] просто витягує секунди з time.localtime()повернення до Росії   вартість

Найкраще time.sleep це те, що він підтримує плаваючу точку   номери!

import time
time.sleep(0.1) 

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


117
2018-02-04 07:07



time.sleep(time.localtime(time.time())[5]) взагалі не має сенсу. Це буде чекати довше, якщо менше часу буде до наступної повної хвилини. Якщо ви хочете зачекати до кінця поточної хвилини, я запропонував би: time.sleep(-time.time() % 60) (це також працює з іншими інтервалами) - Stefan Paul Noack


Ви можете отримати це, просто виконавши це:

from time import sleep

# Doing stuff
sleep(0.5) # Sleeping half a second (sleep() uses seconds, but you can also use floats)
# Doing stuff...

54
2018-01-18 18:48



Додано нічого до відповіді вище або вище. - Artemis Fowl
насправді це не вимагає встановлення пакета, тому його, мабуть, слід позначити як найкращу відповідь - s2t2


Трохи весело з сонним генератор.

Питання про час затримки. Це може бути фіксованим часом, але в деяких випадках нам може знадобитися затримка, виміряна з моменту останнього часу. Ось одне можливе рішення:

Затримка вимірюється з останнього часу (пробудження регулярно)

Ситуація може бути, ми хочемо зробити щось як можна більш регулярно, і ми не хочемо турбуватися з усіма last_time, next_time матеріал навколо нашого коду.

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

Наступний код (sleepy.py) визначає a 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

Заклик до звичайних гурманів

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)

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


33
2018-05-14 21:30





Як я можу затримати час роботи в Python?

В одній течії я пропоную функцію сну:

>>> from time import sleep

>>> sleep(4)

Це фактично призупиняє обробку нитки, в якій вона викликається операційною системою, дозволяючи виконувати інші потоки та процеси, поки вона спить.

Використовуйте це для цієї мети або просто затримати функцію від виконання. Наприклад:

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

"Ура!" друкується через 3 секунди після того, як я потрапив Введіть.

Приклад використання 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різьблення об'єкта:

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

>>> 

Пуста рядок показує, що функція надрукована до мого стандартного, і мені довелося потрапити Введіть щоб переконатися, що я був на місці.

Підвищення цього методу полягає в тому, що в той час як Timer нитка чекала, я зміг зробити інші речі, в даному випадку удар Введіть один раз - перед виконанням функції (див. першу пусту пропозицію).

В мультипроцесорній бібліотеці немає відповідного об'єкта. Ви можете створити його, але це, можливо, не існує з причини. Підтип робить набагато більший сенс для простого таймера, ніж цілий новий підпроцес.


21
2018-06-21 03:25





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

Якщо ви використовуєте tkinter, НЕ ВИКОРИСТОВУЙТЕ TIME.SLEEP() тому що він буде збивати вашу програму. Це сталося зі мною. Замість цього використовуйте root.after() і замініть значення, як багато секунд, з мілісекундами. Наприклад, time.sleep(1) еквівалентно root.after(1000) в tkinter.

Інакше time.sleep(), про який багато вказують відповіді, і це шлях.


20
2018-02-28 19:45





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

Почнемо з найпростішого:

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

Другий метод затримки буде використовувати метод implied wait:

 driver.implicitly_wait(5)

Третій метод є більш корисним, коли потрібно зачекати, доки не буде виконано певну дію або поки елемент не знайдено:

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

11
2018-01-05 10:41



Другий та третій методи не є Python per-se, але селен пов'язаний. І ви використовуватимете їх, коли будете робити тести E2E. О.П. не згадав про жодного з них. - alexandernst


Щоб задати час, ви повинні імпортувати time модуль І з цим модулем вам потрібно лише написати:

time.sleep(The amount of time)

Наприклад, якщо ви хочете встановити час затримки на секунду перед тим, як комп'ютер запустить чергову лінію, вам слід помістити:

time.sleep(1)
print('Hello, World!')

Це все :)


9
2017-07-04 10:55



Як ця відповідь відрізняється від першої опублікованої відповіді майже 9 років тому? - Peter Mortensen


Затримки виконуються з бібліотека часу, зокрема time.sleep () функція ...

Щоб просто зачекати на секунду:

from time import sleep
sleep(1)

Це працює, оскільки робить:

from time import sleep

ви витягуєте функція сну  тільки від бібліотека часу а це означає, що ви можете просто назвати це:

sleep(seconds)

а не видавати

time.sleep()

який незграбно довго набирати.

За допомогою цього методу ви не отримаєте доступ до інших функцій бібліотека часу і ви не можете мати змінну, яка називається сном. Але ви можете створити змінну з назвою часу.

Робити з [бібліотеки] імпортувати [функція] (, [функція2]) чудово, якщо ви просто хочете певні частини модуля.

Ви могли би так само робити це як

import time
time.sleep(1)

і ви матимете доступ до інших функцій бібліотека часу люблю time.clock() поки ти набираєш часфункція, але ви не могли створити змінний час.


6
2018-06-13 19:04





Є 4 методи, які я знаю: time.sleep(), pygame.time.wait(), матплатліб pyplot.pause(), і .after().


time.sleep() Приклад (не використовуйте, якщо використовується Tkinter):

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

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

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

6
2017-07-05 20:47