我需要每隔x分钟编写一次给定方法的执行。
我找到了两种方法:首先使用sched
模块,第二种使用Threading.Timer
。
第一种方法:
import sched, time
s = sched.scheduler(time.time, time.sleep)
def do_something(sc):
print "Doing stuff..."
# do your stuff
sc.enter(60, 1, do_something, (sc,))
s.enter(60, 1, do_something, (s,))
s.run()
第二个:
import threading
def do_something(sc):
print "Doing stuff..."
# do your stuff
t = threading.Timer(0.5,do_something).start()
do_something(sc)
差异是什么,如果有一个比另一个好,哪一个?
答案 0 :(得分:11)
在Python 2中不安全 - Python 3.2:
来自the Python 2.7 sched
documentation:
在多线程环境中,
scheduler
类在线程安全方面存在限制,无法在正在运行的调度程序中当前挂起的任务之前插入新任务,并且在事件发生之前保持主线程队列是空的。相反,首选方法是改为使用threading.Timer
类。
来自the latest Python 3 sched
documentation
在版本3.3中更改:
scheduler
类可以安全地用于多线程环境。