TGViewer
Python Заметки Python Заметки @pythonotes · 2.2K subscribers
Post #194 1.67K
Как в простом скрипте выполнить отложенное действие или даже несколько?
Например, нам требуется удалить файл через 10 секунд после его создания, но при этом основной поток не должен просто остановиться на 10 секунд с помощью time.sleep().
Допустим, у нас также нет никаких асинхронных очередей задач типа rq или celery.

Самый простой способ это класс threading.Timer.
Это удобный способ выполнить отложенное действие, которое не блокирует основной поток. А так же это пример как писать многопоточный код на базе класса threading.Thread. Всё что делает этот класс, это создаёт отдельный поток, в котором и будет запущена функция ожидания.

from threading import Timer
import os

filename = '/home/user/data.txt'
t = Timer(10, lambda: os.remove(filename))
t.start()

Можно проверить выполнилось ли действие с помощью неблокирующго метода ивента is_set()

if t.finished.is_set():
# do something

или отменить выполнение

t.cancel()

А что будет если процесс интерпретатора завершится ДО завершения таймаута?

Тут у нас два варианта:
🔸 Если поток запущен как Daemon то он завершится вместе с программой, тем самым отменив выполнение колбека.
🔸 В противном случае программа не завершится пока поток не завершится.

По умолчанию режим Daemon отключен, то есть программа в любом случае дождётся исполнения колбека и только потом завершится.

Переключение режима следует делать ДО запуска потока!

t = Timer(...)
t.setDaemon(True)
t.start()

#tricks
More from @pythonotes
  1. Sep 21, 2026­ WebAssembly это мощная технология позволяющая загружать практически любое приложение в б…
  2. Aug 17, 2026Не так давно столкнулся с API который в ответе с ошибкой присылал только статус-код. Без п…
  3. Jul 20, 2026У меня основная ОС это Linux. Но нередко требуется делать сборку клиента под Windows. Соби…
  4. Jul 13, 2026В прошлый раз был пример с понижением привелегий процесса. Проблема в том, что обратно под…
  5. Jul 6, 2026Модуль pwd может использоваться для считывания информации о пользователях из базы данных п…
  6. Jun 22, 2026Недавно я реализовал Multi Tenancy систему на FastAPI + SQLAlchemy и пересобрал её в небол…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →