【发布时间】:2020-08-10 14:30:56
【问题描述】:
我需要在 Python 中创建一个实时调度程序,它每 n 纳秒执行一个简单的函数。
我尝试通过sched 模块创建调度程序并将time.time_ns 指定为timefunction,但在尝试使用延迟函数来安排比几秒更精细的等待时出现错误。
这是我正在执行的代码:
import sched
import time
def scheduledPrint():
print("ScheduledPrinter!")
def run():
print("Starting")
# Create an internal scheduler
scheduler=sched.scheduler(timefunc=time.monotonic_ns, delayfunc=time.sleep)
exectime=time.time_ns() + 100;
schedevent=scheduler.enterabs(exectime, 1, 'scheduledPrint')
scheduler.run();
run()
当我运行上面的代码时,我得到以下错误
delayfunc(time - now)
OverflowError: timestamp too large to convert to C _PyTime_t
Python 调度程序的最佳精度是多少?
【问题讨论】:
-
scheduler的timefunc和delayfunc必须使用相同的时间单位 - 您在这里尝试混合使用纳秒和秒。无论如何,我认为您不太了解一纳秒有多短 - 仅设置对scheduler.run()的调用就会超过 100 纳秒,执行准时是不可能的。 -
@jasonharper 感谢您的评论,我向您保证我知道一纳秒有多短,实际上我正在尝试评估 Python 是否可以提供具有相同分辨率的默认调度程序。如果 python 的 sleep 函数的最佳分辨率是一秒,那么我可能只能每秒执行一个调用,1Hz,这将判定 Python 不适合我的测试用例。
标签: python python-3.x time scheduler