需要使用Python sched模块减少调度延迟

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

所以我已经阅读了有关可从 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

python scheduling real-time-clock python-schedule python-sched
© www.soinside.com 2019 - 2024. All rights reserved.