Ответ 1
Существует удобный планировщик событий, который может делать то, что вам нужно. Здесь ссылка на документацию:
Возможный дубликат:
Предложения для планировщика Cron в Python?
Какой был бы самый pythonic способ запланировать выполнение функции в качестве фоновой задачи? Есть несколько идей здесь, но все они кажутся мне довольно уродливыми. И неполный.
Класс java Timer имеет очень полное решение. Кто-нибудь знает о подобном классе python?
Существует удобный планировщик событий, который может делать то, что вам нужно. Здесь ссылка на документацию:
Многие программисты стараются избегать многопоточного кода, поскольку он сильно подвержен ошибкам в императивном программировании.
Если вы хотите выполнить запланированную задачу в однопоточной среде, вам, вероятно, понадобится какой-то " Reactor". Вы можете использовать готовый вариант, например Twisted.
Тогда это была бы основная функция, предоставляемая вашим реактором, например (с pygame):
pygame.time.set_timer - многократно создает событие в очереди событий
Не прямой ответ на вопрос.
В операционной системе Linux/Unix есть несколько способов сделать это, и обычно я просто обычно пишу свою программу / script, а затем добавляю ее в cron или что-то подобное (например, launchd в OS X)
Ответ на вопрос начинается здесь.
Использовать стандартный модуль расписания python - стандартная документация по библиотеке описывает некоторые отличные решения.
попробуйте модуль 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)
Python имеет класс Timer в потоковом модуле, но это таймер с одним выстрелом, поэтому вам лучше делать что-то, как вы видели ссылки. http://code.activestate.com/recipes/65222/
Почему вы думаете, что это уродливо, как только вы написали такое использование класса, будет так же просто, как в java.
если вы используете его внутри некоторого GUI, например. wxPython, чем у wx.Timer, который вы можете напрямую использовать