Таймер для определенного выполнения кода на python
Всем привет скиньте пожалуйста пример кода, нужно параллельно запустить 2 программы (одна к примеру печатает символы, другая считает время к примеру в секундах), когда время заканчивается первая программа тоже должна остановить выполнение. При этом первая не должна останавливать свою работу.
def f1(): while True: print("q")
def f2(): time.sleep(3)
Ответы (1 шт):
Автор решения: i-aztec
→ Ссылка
Для реализации такого сценария в Python можно использовать многопоточность (модуль threading) или асинхронное программирование (модуль asyncio). Но у вас в тегах указано asyncio, поэтому я напишу пример с помощь этой библиотеки.
Вот пример кода:
import asyncio
async def print_symbols():
"""Асинхронная функция, которая печатает символы, пока не завершится другая задача."""
try:
while True:
print("q", end=" ", flush=True)
await asyncio.sleep(0.1) # Асинхронная задержка
except asyncio.CancelledError:
print("\nPrinting stopped.")
raise # Повторно вызываем исключение, чтобы корректно завершить задачу
async def countdown(seconds):
"""Асинхронная функция, которая отсчитывает время."""
print(f"\nStarting countdown for {seconds} seconds...")
await asyncio.sleep(seconds) # Асинхронная задержка на указанное время
print("\nTime is up!")
async def main():
"""Основная функция для запуска задач."""
# Запускаем задачу печати символов
print_task = asyncio.create_task(print_symbols())
# Запускаем задачу отсчета времени
await countdown(3)
# После завершения countdown отменяем задачу печати
print_task.cancel()
try:
await print_task # Ждем завершения задачи печати (обработка отмены)
except asyncio.CancelledError:
pass # Игнорируем ошибку отмены
if __name__ == "__main__":
# Запускаем асинхронный цикл событий
asyncio.run(main())
При запуске программы вы увидите что-то вроде этого:
Starting countdown for 3 seconds...
q q q q q q q q q q q q q q q q q q q q q q q q q q q
Time is up!
Printing stopped.