在每个系统时钟分钟重复 python 函数
Repeat python function at every system clock minute
我发现我可以使用事件循环库 in this post:
每 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:00PM、11:45:00PM 等等。
我怎样才能达到这个结果?
如果您按照永远 运行ning 程序的思路思考,则必须使用 now = datetime.now()
之类的方法来 ping 系统时间。现在,如果您想要 1 秒的准确度来捕获 :00
window,这意味着您必须更频繁地执行 ping。
通常更好的方法是在 Linux 系统中使用 Windows Task Scheduler 或 Crontab 在外部安排脚本执行。
例如,这应该 运行 每 XX:YY:00
:
* * * * * python run_script.py
很难做到精确到 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
因此它检查是否有新的分钟并再次调用 datetime 函数。延迟大约为 0.2 毫秒。
使用schedule.
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()
我发现我可以使用事件循环库 in this post:
每 x 秒重复一个函数 pythonimport 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:00PM、11:45:00PM 等等。
我怎样才能达到这个结果?
如果您按照永远 运行ning 程序的思路思考,则必须使用 now = datetime.now()
之类的方法来 ping 系统时间。现在,如果您想要 1 秒的准确度来捕获 :00
window,这意味着您必须更频繁地执行 ping。
通常更好的方法是在 Linux 系统中使用 Windows Task Scheduler 或 Crontab 在外部安排脚本执行。
例如,这应该 运行 每 XX:YY:00
:
* * * * * python run_script.py
很难做到精确到 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
因此它检查是否有新的分钟并再次调用 datetime 函数。延迟大约为 0.2 毫秒。
使用schedule.
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()