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

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


person TK.    schedule 18.12.2008    source источник


Ответы (6)


Используйте time.sleep().

from time import sleep
sleep(0.05)
person Will Boyce    schedule 18.12.2008
comment
@CsabaToth, если у вас есть реализация Python, соответствующая спецификациям вашей ОС, приведенное выше не зависит от ОС. - person Chris; 21.11.2018
comment
Но как это на самом деле работает? Например, часто ли фактическое разрешение по времени составляет 16,66 мс (1/60 секунды)? В этом конкретном случае время сна оказывается ровно в 3 раза больше временного разрешения. Однако как насчет округления? Что, если 3 на самом деле равно 2,9999999 из-за операций с плавающей запятой и округлено до 2 (фактическое время сна = 0,0333333 с = 33,33 мс)? - person Peter Mortensen; 07.02.2021

Обратите внимание: если вы рассчитываете, что сон займет ровно 50 мс, вы этого не получите. Это как раз об этом.

person ya23    schedule 18.12.2008
comment
Имейте в виду, что это может быть на 10 или 15 мс больше, чем на некоторых платформах. - person Kylotan; 17.01.2009
comment
Это постоянная задержка в данной системе? - person user391339; 19.02.2018
comment
@ user391339 По опыту не согласуется. Приоритет потока / процесса, средняя загрузка ЦП, доступная память и множество других факторов делают все вызовы неточными. Чем более загружена система, тем выше неточность. - person David; 28.01.2019
comment
Может быть интересно узнать, что «функция [time.sleep(secs)] спит по крайней мере secs», начиная с Python 3.5, согласно документации. - person Elias Strehle; 30.10.2019

Используйте 1_:

import time
time.sleep(50 / 1000)

См. Документацию Python: https://docs.python.org/library/time.html#time.sleep

person Dan Olson    schedule 18.12.2008

Есть модуль под названием «время», который может вам помочь. Я знаю два пути:

  1. sleep

    Сон (ссылка) просит программу подождать, а затем выполнить остальная часть кода.

    Есть два способа использовать сон:

    import time # Import whole time module
    print("0.00 seconds")
    time.sleep(0.05) # 50 milliseconds... make sure you put time. if you import time!
    print("0.05 seconds")
    

    Второй способ не импортирует весь модуль, а просто спит.

    from time import sleep # Just the sleep function from module time
    print("0.00 sec")
    sleep(0.05) # Don't put time. this time, as it will be confused. You did
                # not import the whole module
    print("0.05 sec")
    
  2. Используется время, прошедшее с времени Unix.

    Этот способ полезен, если вам нужно запустить цикл. Но этот немного сложнее.

    time_not_passed = True
    from time import time # You can import the whole module like last time. Just don't forget the time. before to signal it.
    
    init_time = time() # Or time.time() if whole module imported
    print("0.00 secs")
    while True: # Init loop
        if init_time + 0.05 <= time() and time_not_passed: # Time not passed variable is important as we want this to run once. !!! time.time() if whole module imported :O
            print("0.05 secs")
            time_not_passed = False
    
person Lucas Urban    schedule 03.07.2020

Вы также можете сделать это с помощью функции Timer().

Код:

from threading import Timer

def hello():
  print("Hello")

t = Timer(0.05, hello)
t.start()  # After 0.05 seconds, "Hello" will be printed
person anms_pro    schedule 12.05.2020
comment
Как это на самом деле работает при субсекундном сне? Часто таймеры имеют временное разрешение 16,66 мс. - person Peter Mortensen; 07.02.2021

Вы также можете использовать pyautogui как:

import pyautogui
pyautogui._autoPause(0.05, False)

Если первый аргумент не равен None, тогда он будет приостановлен на секунды первого аргумента, в этом примере: 0,05 секунды.

Если первый аргумент - None, а второй аргумент - True, то он будет спать для настройки глобальной паузы, которая установлена ​​с:

pyautogui.PAUSE = int

Если вас интересует причина, посмотрите исходный код:

def _autoPause(pause, _pause):
    """If `pause` is not `None`, then sleep for `pause` seconds.
    If `_pause` is `True`, then sleep for `PAUSE` seconds (the global pause setting).

    This function is called at the end of all of PyAutoGUI's mouse and keyboard functions. Normally, `_pause`
    is set to `True` to add a short sleep so that the user can engage the failsafe. By default, this sleep
    is as long as `PAUSE` settings. However, this can be override by setting `pause`, in which case the sleep
    is as long as `pause` seconds.
    """
    if pause is not None:
        time.sleep(pause)
    elif _pause:
        assert isinstance(PAUSE, int) or isinstance(PAUSE, float)
        time.sleep(PAUSE)
person okie    schedule 18.06.2019
comment
так или иначе, лучше использовать time.sleep, чем this, но если вы хотите, чтобы ваша программа была чистой autopygui, тогда это может быть выходом. - person okie; 15.09.2019