将函数作为后台任务定期运行的最佳pythonic方法是什么?有一些想法here,但它们对我来说都显得相当难看。并且不完整。
java Timer类有一个非常完整的解决方案。有人知道类似的python类吗?
答案 0 :(得分:12)
有一个方便的事件调度程序可以执行您需要的操作。这是文档的链接:
答案 1 :(得分:9)
尝试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)
答案 2 :(得分:7)
许多程序员试图避免使用多线程代码,因为它在命令式编程中容易出错。
如果您想在单线程环境中执行计划任务,那么您可能需要某种“Reactor”。您可能想要使用像Twisted这样的现成品。
然后它将是您的反应堆提供的基本功能,例如(使用pygame):
pygame.time.set_timer - 在事件队列上重复创建一个事件
答案 3 :(得分:7)
不直接回答这个问题。
在Linux / Unix操作系统上,有几种方法可以这样做,通常我只是正常编写程序/脚本,然后将其添加到cron或类似的东西(如OS X上的launchd)
问题的答案从这里开始。
使用标准的python sched模块 - standard library documentation描述了一些漂亮的解决方案。
答案 4 :(得分:2)
Python在线程模块中有一个Timer类,但这是一次性计时器,所以你可以更好地做一些看到链接的东西。 http://code.activestate.com/recipes/65222/
为什么你认为这很难看,一旦你写完这样的类用法就像在java中一样简单。
如果您在某些GUI中使用它,例如wxPython比它有wx.Timer你可以直接使用