моделируйте crontab с отсроченным искривленным и требования перекручивания

Я хотел бы осуществить подобное крону поведение со своим искривленным заявлением. Я хочу вызвать периодическое требование (скажем, каждую неделю), но бегущий в точное время только, не, когда я запускаю свое приложение.

Мой вариант использования следующий: мое приложение питона запущено в любое время на неделе. Я хочу, чтобы требования были выполнены каждый понедельник в 8:00. Но я не хочу к perorm активному ожиданию (использующий time.sleep ()), я хотел бы использовать callLater, чтобы вызвать требование в следующий понедельник и затем начать требование перекручивания из той даты.

какая-либо идея/совет? спасибо, J.

0
nl ja de

3 ответы

If you are absolutely in love with cron-style specifiers, you could also consider using parse-crontab

Тогда ваш код смотрит в основном как:

from crontab import CronTab
monday_morning = CronTab("0 8 * * 1")

def do_something():
    reactor.callLater(monday_morning.next(), do_something)
    # do whatever you want!

reactor.callLater(monday_morning.next(), do_something)
reactor.run()
5
добавлено
Спасибо, это действительно, в чем я нуждаюсь.
добавлено автор Daniel Dai, источник

Если я понял ваш вопрос правильно, вы думаете в первый раз о выполнении запланированной задачи и как поставлять начальное время начала для приложения. Если это - случай, просто необходимо вычислить стоимость timedelta в секундах, которые будут переданы к callLater.

import datetime
from twisted.internet import reactor

def cron_entry():
    full_weekseconds = 7*24*60*60
    print "I was called at a specified time, now you can add looping task with a full weekseconds frequency"


def get_seconds_till_next_event(isoweekday,hour,minute,second):
    now = datetime.datetime.now()
    full_weekseconds = 7*24*60*60
    schedule_weekseconds = ((((isoweekday*24)+hour)*60+minute)*60+second)
    now_weekseconds=((((now.isoweekday()*24)+now.hour)*60+now.minute)*60+now.second)

    if schedule_weekseconds > now_weekseconds:
        return schedule_weekseconds - now_weekseconds
    else:
        return  now_weekseconds - schedule_weekseconds + full_weekseconds


initial_execution_timedelta = get_seconds_till_next_event(3,2,25,1)
"""
This gets a delta in seconds between now and next Wednesday -3, 02 hours, 25 minutes and 01 second
"""
reactor.callLater(initial_execution_timedelta,cron_entry)
reactor.run()
1
добавлено
Я знаю, что это - плохая практика, чтобы не использовать datetime.timedelta для этих вычислений, но я застрял с хорошей передачей отрицательных к положительным ценностям. прощение.
добавлено автор jbreicis, источник
Пожалуйста.
добавлено автор jbreicis, источник
эй, большое спасибо, я попробую ваше решение и сообщу, работает ли оно. Большое спасибо за помощь мне так быстро.
добавлено автор user1151446, источник
привет снова я попробовал ваш метод, он работает отлично, спасибо. Однако, использование разбора-crontab более компактно, (см. fmoo' s отвечают выше),
добавлено автор user1151446, источник

If you like Cron and Twisted you should have a look at: https://github.com/benliles/TxScheduling

0
добавлено
Python
Python
7 654 участник(ов)

Уютный чат для профессионалов, занимающихся поиском питоньих мудростей. Как не получить бан: https://t.me/ru_python/577926

Python beginners
Python beginners
4 449 участник(ов)

Вопросы про Python для чайников. Cпам и троллинг неприемлем. Не злоупотребляйте стикерами. Частозадаваемые вопросы: https://github.com/ru-python-beginners/faq/blob/master/README.md Статистика тут: https://grstats.me/chat/x4qym2k5uvfkr3al6at7

pro.python
pro.python
1 090 участник(ов)

Сообщество разработчиков под Python Создатель: @rodgelius

Rude Python
Rude Python
971 участник(ов)

Python без „девочек”, здесь матерятся и унижают Django. Not gay friendly. Правила: t.me/rudepython/114107 @rudepython | t.me/rudepython

rupython
rupython
509 участник(ов)

Группа создана с целью оперативного получения ответов на возникающие вопросы по разработке на яп python, смежные темы, а также человеческого общения. Приветствую!

Python-programming
Python-programming
266 участник(ов)

Чат группы вконтакте https://vk.com/python_community