@blablatdinov

Как выполнять функцию python каждый день в определенное время?

Пишу бота который должен каждое утро рассылать сообщения пользователям, функция для этого уже написана. Как мне запускать эту функцию каждый день? "schedule" использовать не могу, т.к. его цикл блокирует другие функции бота.
  • Вопрос задан
  • 8843 просмотра
Решения вопроса 1
Запустите schedule в отдельном потоке (thread), процессе (multiprocessing) или асинхронно (asincio).

Или реализовать отправку при передаче особого параметра при запуске бота и запускать по крону. Типа
python mybot.py --motd
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
MaxLevs
@MaxLevs
Используя стандартный модуль threading.
Пример
from time import sleep, time
from functools import wraps


def mult_threading(func):
     """Декоратор для запуска функции в отдельном потоке"""
     @wraps(func) 
     def wrapper(*args_, **kwargs_): 
         import threading 
         func_thread = threading.Thread(target=func,  
                                        args=tuple(args_),  
                                        kwargs=kwargs_) 
         func_thread.start()
         return func_thread 
     return wrapper


#  Сразу делаем функцию многопоточной
@mult_threading 
def some_func(x, y, name="Petia", df=None, *args, **kwargs): 
     sleep(5) #  Тут мы чего-то доолго ждем / вычисляем / etc
     print("X = %s; Y = %s; Name=%s; df=%s" % (x, y, name, df)) 
     print("Another args:", args, kwargs)


#  ==Проверяем работу==
#  Стартуем нашу долгоиграющую функцию
some_func(4, 7, df=11, 21, clone="SomeClone")

#  Занимаемся очень важными делами
for Z in range(25): 
    print(Z)
    sleep(0.2)


Результат
5c46b2b44f46b621492560.gif
Ответ написан
ScriptKiddo
@ScriptKiddo
Как вариант - выкинуть функционал рассылки в отдельный файл и запускать его по Cron
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы