Автор оригинала: Pankaj Kumar.
Как дождаться определенного времени в Python?
Всем привет! В этом посте мы посмотрим, как мы можем дождаться определенного времени в Python.
Это особенно важно, когда у вас есть определенные события или задачи, запланированные после определенного периода времени.
Python предлагает нам разные способы сделать это. Итак, давайте посмотрим на все подходы, которые мы можем использовать: как в однопоточной, а также в многопоточной среде!
Python – ждать определенного времени в однопоточных средах
Если ваша главная программа состоит только из одного потока/программы, то Python делает это очень легко для нас.
Одним из возможных подходов, чтобы сделать программу ждать определенного времени в Python, использует время модуль.
Используя time.sleep () ждать
Мы можем использовать time.sleep (n)
ждать N
секунды. Конечно, мы можем сделать N
быть десятичным, чтобы быть более точным с нашим интервалом!
Вот простой пример, который расплачивается две вызовы функций от 3 секунд в зависимости от друг друга.
import time def fun1(a): return 2 * a def fun2(a): return a * a if __name__ == '__main__': inp = 10 print(f"Input = {inp}") print(f"Result of fun1 call: {fun1(inp)}") time.sleep(3) # Wait for 3 seconds print(f"After 3 milliseconds, Result of fun2 call: {fun2(inp)}")
Выход
Input = 10 Result of fun1 call: 20 After 3 seconds, Result of fun2 call: 100
Достаточно просто, верно?
Ожидание в многопоточной среде
Если у вас есть несколько потоков в вашей программе, вы все еще можете использовать одну и ту же логику через time.sleep ()
сделать определенную нить ждать определенного времени в Python
Вот пример, который порождает 3 нити, и заставляет их спать на секунду альтернативы, а другие потоки продолжают печатать номера от 1.
Мы будем использовать chapulent.futures
Модуль и использовать ThreadPoolexecutor
Для бассейна и выполнения ниток, при этом результаты, используя as_completed ()
Отказ
Основная структура нереста и выбывания с использованием нитей выглядит следующим образом:
from concurrent.futures import ThreadPoolExecutor, as_completed # The threads will call this function def callback(): pass with ThreadPoolExecutor() as thread_executor: # Await all results await_results = [thread_executor.submit(callback) for i in range(1, tid+1)] # Fetch them! for f in as_completed([future for future in await_results]): print(f.result())
Теперь, давайте напишем код для нашей основной программы.
from concurrent.futures import ThreadPoolExecutor, as_completed import time # Global Variable for the Thread ID Number tid = 0 # Spawn 4 threads NUM_THREADS = 4 def func(arg): time.sleep(1) return arg * arg if __name__ == '__main__': with ThreadPoolExecutor() as thread_executor: start_time = time.time() # Going to spawn threads tid += NUM_THREADS # Await all results await_results = [thread_executor.submit(func, arg=i) for i in range(1, tid+1)] for f in as_completed([future for future in await_results]): print(f.result()) end_time = time.time() print(f"Total Time taken for {NUM_THREADS} threads: {end_time - start_time}")
Выход
1 4 9 16 Total Time taken for 4 threads: 1.0037879943847656
Как видите, мы породили 4 потока, которые все ждали за 1 секунду, прежде чем давать результат функции. Это очень близко к 1 секунду, поэтому наш выход имеет смысл!
Использование Threading.timer () для расписания вызовов функций
Однако, если вы хотите определенную функцию ждать определенного времени в Python, мы можем использовать Threading.timer ()
Метод от резьба
модуль.
Мы покажем простой пример, который расплачивается на вызов функции каждые 5 секунд.
from threading import Timer import time def func(a, b): print("Called function") return a * b # Schedule a timer for 5 seconds # We pass arguments 3 and 4 t = Timer(5.0, func, [3, 4]) start_time = time.time() # Start the timer t.start() end_time = time.time() if end_time - start_time < 5.0: print("Timer will wait for sometime before calling the function") else: print("5 seconds already passed. Timer finished calling func()")
Выход
Timer will wait for sometime before calling the function Called function
Здесь главная программа пришла к последней строке до 5 секунд, поэтому таймер заставляет программу дождаться до тех пор, пока не звонит Func ()
Отказ
После звонка Func (A, B)
, он прекращает программу, так как не больше нечего бегать.
Также обратите внимание, что возвращаемое значение функции не может использоваться основной программой.
Надеюсь, это дало вам еще несколько представлений о планировании и ожидании промежуток времени.
Заключение
В этой статье мы узнали о ожидании определенного периода времени в Python, используя time.sleep ()
Отказ Мы также видели, как мы могли бы использовать это в многопоточной среде, а также вызовы функций планирования.
использованная литература
- Python Docs на Threading Timer
- Stackoverflow вопрос при создании задержек времени