@tmkbl

Какую библиотеку использовать для выполнения большого количества задач в определенное время Python?

Есть какая-нибудь библиотека, которая может следующее? Циклом нужно создать около 400 задач. Каждая задача должна выполнятся один раз в установленное время и дату. Сделать хочу в пределах скрипта, а не на cron'ах всяких.
Мне бы подошла популярная библиотека schedule, но я не могу понять: там можно на определенное время и дату задание поставить? Я что-то такого не нашел....
Прошу помочь))).
  • Вопрос задан
  • 518 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Schedule дату не учитывает. Но прямо говоря, реализовать самостоятельно не слишком сложно.
from typing import Dict, List, Tuple, Callable
import datetime
import time

def time_matches_mask(now: datetime.datetime, mask: Dict[str, float], delta: datetime.timedelta) -> bool:
    'Проверяем, совпало ли текущее время с заданной маской с указанной точностью'
    target = now.replace(**mask)
    return abs(now - target) < delta

jobs: List[Tuple[Dict, Callable, Tuple]] = [] #Список элементов: маска, функция, аргументы

def call_pending(jobs, now: datetime.datetime, delta: datetime.timedelta):
    for mask, func, args in jobs:
        if time_matches_mask(now, mask, delta):
            func(*args)

jobs.append( ({'seconds':30}, print, ('Hello world!',)) ) #когда число секунд = 30, вызвать print('Hello world!')

delta = datetime.timedelta(seconds=1) #с какой точностью измерять время?
while True:
    time.sleep(1)
    call_pending(jobs, datetime.datetime.now(), delta)


Правда, есть и тонкости. Стоит избегать вызовов 2 раза подряд из-за большой delta, можно заменить секундный цикл на ожидание до ближайшей задачи (с прерыванием, если список задач изменился). Ну и так далее.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

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

Похожие вопросы