每分钟开始时运行的Python线程

2 投票
2 回答
878 浏览
提问于 2025-04-18 08:42

你好,我需要实现一个线程,它每分钟开始时都会运行。执行的流程应该像这样。

start
sleep until hh.mins.00
do something
sleep until hh.mins.00
do something
sleep ..........
................

有什么好的方法吗?

2 个回答

0

可以考虑使用 sched 这个Python模块。你可以说“在确切的时间X运行”或者“在经过Y秒后运行”。这个模块是标准的,并且支持多线程。

下面是来自很棒的文档的例子:

>>> import sched, time
>>> s = sched.scheduler(time.time, time.sleep)
>>> def print_time(): print "From print_time", time.time()
...
>>> def print_some_times():
...     print time.time()
...     s.enter(5, 1, print_time, ())
...     s.enter(10, 1, print_time, ())
...     s.run()
...     print time.time()
...
>>> print_some_times()
930343690.257
From print_time 930343695.274
From print_time 930343700.273
930343700.276
1

嗨,我觉得我找到了解决办法,不过有一点延迟,就像Mr.c所说的那样。

def run(self):
    while True:
        time.sleep(10-time.time()%10) #sleep to the start of next min
        print time.time()

这里是一个10秒的模拟效果……

1401966250.0
1401966260.01
1401966270.01
1401966280.0
1401966290.01
1401966300.01
1401966310.01
1401966320.01
1401966330.01
1401966340.0
1401966350.01
1401966360.01
1401966370.0
1401966380.01
1401966390.0
1401966400.01
1401966410.0
1401966420.0
1401966430.0
1401966440.0
1401966450.0
1401966460.0

撰写回答