在每个系统时钟分钟重复 python 函数

问题描述 投票:0回答:3

我已经看到,通过使用事件循环库,我可以每 x 秒用 python 重复一个函数在这篇文章中:

import sched, time
s = sched.scheduler(time.time, time.sleep)
def do_something(sc): 
    print("Doing stuff...")
    # do your stuff
    s.enter(60, 1, do_something, (sc,))

s.enter(60, 1, do_something, (s,))
s.run()

但我需要稍微不同的东西:我需要在每个系统时钟分钟调用该函数:晚上 11:44:00、晚上 11:45:00 等等。

我怎样才能达到这个结果?

python repeat event-loop
3个回答
7
投票

使用时间表

import schedule
import time

schedule.every().minute.at(':00').do(do_something, sc)
while True:
    schedule.run_pending()
    time.sleep(.1)

如果

do_something
需要超过一分钟,请将其变成线程,然后再传递给
do

import threading
def do_something_threaded(sc):
    threading.Thread(target=do_something, args=(sc,)).start()

1
投票

精确为 0 很难实现(因为总是有一个小的延迟),但您可以检查分钟是否已更改:

import datetime
minute = None
while True:
    if datetime.datetime.now().minute != minute:
        print(f'Do something {datetime.datetime.now()}')
        minute = datetime.datetime.now().minute 

我机器上的结果:

Do something 2022-01-21 11:24:39.393919
Do something 2022-01-21 11:25:00.000208

因此它检查是否有新的分钟并再次调用日期时间函数。延迟约为0.2毫秒。


1
投票

如果您按照永远运行的程序的思路思考,则必须使用类似

now = datetime.now()
的内容来 ping 系统时间。现在,如果您希望以 1 秒的精度捕获该
:00
窗口,这意味着您必须更频繁地执行 ping 操作。

通常更好的方法是在 Linux 系统中使用 Windows 任务计划程序或 Crontab 来安排脚本执行。

例如,这应该运行每个

XX:YY:00
:

* * * * * python run_script.py
© www.soinside.com 2019 - 2024. All rights reserved.