Запуск задачи с определенными интервалами в python

Возможный дубликат:
Предложения для планировщика Cron в Python?

Какой был бы самый pythonic способ запланировать выполнение функции в качестве фоновой задачи? Есть несколько идей здесь, но все они кажутся мне довольно уродливыми. И неполный.

Класс java Timer имеет очень полное решение. Кто-нибудь знает о подобном классе python?

Ответы

Ответ 1

Существует удобный планировщик событий, который может делать то, что вам нужно. Здесь ссылка на документацию:

http://docs.python.org/library/sched.html

Ответ 2

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

Если вы хотите выполнить запланированную задачу в однопоточной среде, вам, вероятно, понадобится какой-то " Reactor". Вы можете использовать готовый вариант, например Twisted.

Тогда это была бы основная функция, предоставляемая вашим реактором, например (с pygame):

pygame.time.set_timer - многократно создает событие в очереди событий

Ответ 3

Не прямой ответ на вопрос.

В операционной системе Linux/Unix есть несколько способов сделать это, и обычно я просто обычно пишу свою программу / script, а затем добавляю ее в cron или что-то подобное (например, launchd в OS X)

Ответ на вопрос начинается здесь.

Использовать стандартный модуль расписания python - стандартная документация по библиотеке описывает некоторые отличные решения.

Ответ 4

попробуйте модуль multiprocessing.

from multiprocessing import Process
import time

def doWork():
    while True:
        print "working...."
        time.sleep(10)



if __name__ == "__main__":
    p = Process(target=doWork)
    p.start()

    while True:
        time.sleep(60)

Ответ 5

Python имеет класс Timer в потоковом модуле, но это таймер с одним выстрелом, поэтому вам лучше делать что-то, как вы видели ссылки. http://code.activestate.com/recipes/65222/

Почему вы думаете, что это уродливо, как только вы написали такое использование класса, будет так же просто, как в java.

если вы используете его внутри некоторого GUI, например. wxPython, чем у wx.Timer, который вы можете напрямую использовать