所以我已经阅读了有关可从 Python 访问的不同时钟(monotonic、time_perf、process_time)的文档和文章,但在使用调度程序调用函数时,我仍然遇到不可接受的延迟。我有 12 到 30 秒的延迟。
def schedule_function():
#recording time when function is called and printing
print(datetime.datetime.now())
current_time = datetime.datetime.now()
print("The current time on this computer is:", current_time)
# -- some code where I calculate the delay in seconds as a float called 'seconds' ---
#Scheduled event
s = sched.scheduler(time.monotonic, time.sleep)
s.enter(seconds, 0, schedule_function)
#where seconds is delay in seconds calculated from user user input datetime
s.run()
我的输出看起来像这样: 这台电脑上的当前时间是:2023-05-02 16:11:36.710999
请输入您希望今天的功能运行的时间:<2023-05-02 16:12:00>
2023-05-02 16:12:11.147581
计算本身花费的时间可以忽略不计。我不太了解调度程序如何调用 delayfunc() 以了解是否可以使用调度程序函数来缓解这种情况。
我应该只使用 CRON 吗?
我只是想知道我是不是做错了什么或滥用了,然后才跳到另一种方法来解决。
我确保没有在其他地方造成延迟,并尝试将 time.sleep 设置为较小的增量(这会生成“'NoneType' 对象不可调用”错误)。我尝试使用具有更高分辨率/滴答率的不同时钟(perf_counter 和 process_time 给我更差的结果 - 为什么?)但即使是 64 个滴答也不应该导致第二次延迟,更不用说 12 个了。 https://www.webucator.com/article/python-clocks-explained/
来自 python 文档: 类 sched.scheduler(timefunc=time.monotonic, delayfunc=time.sleep)
我的陈述: s = sched.scheduler(time.monotonic, time.sleep)
睡眠时间应该在 100 纳秒的分辨率下,也应该不是问题。 https://docs.python.org/3/library/time.html#time.sleep
我曾尝试更改优先级,以防有其他进程看似无效。 https://bugs.python.org/issue13449 https://bugs.python.org/issue44681
有人可以解释我错过了什么吗?或者告诉我使用 CRON