毫秒精确python定时器
我在一个python脚本上工作,该脚本设计用于同时控制多个执行器。为了简化,假设我需要控制两个电机 使用多处理模块,我为每个电机创建一个过程,并将数据保存在一张表上 脚本的这一部分工作正常,但是我需要在精确的时间控制我的马达,每毫秒一次,time()或time.clock()函数似乎不可靠(触发时间在0.05到30毫秒之间!) 这些函数如此不稳定是“正常”的,还是由脚本的另一部分引起的 编辑:我使用了datetime函数(见下文)来提高精度,但仍然存在一些离散级别的错误。例如,如果我想要1ms,我也得到1.25,0.75,1.5。。。毫秒精确python定时器,python,timer,Python,Timer,我在一个python脚本上工作,该脚本设计用于同时控制多个执行器。为了简化,假设我需要控制两个电机 使用多处理模块,我为每个电机创建一个过程,并将数据保存在一张表上 脚本的这一部分工作正常,但是我需要在精确的时间控制我的马达,每毫秒一次,time()或time.clock()函数似乎不可靠(触发时间在0.05到30毫秒之间!) 这些函数如此不稳定是“正常”的,还是由脚本的另一部分引起的 编辑:我使用了datetime函数(见下文)来提高精度,但仍然存在一些离散级别的错误。例如,如果我想要1ms,
因此,在我看来,这是由于计算机硬件(正如Serge Ballesta所说)。我还不能给你一个评论(声誉),所以给你一个答案: 这只是一个线索: 尝试使用cProfile模块 它允许您检查脚本的执行时间,以及脚本中的每个函数。cProfile模块中的Function.run()返回有关脚本的精确统计信息。
也许它可以帮助您..我想问题不在您的脚本中,而更可能在您的机器中。我假设您使用的是Linux或Windows下的标准计算机。即使计算机能够在一毫秒内完成许多事情,它也会不断地执行以下操作:
- 网络
- 鼠标或键盘事件
- 屏幕(包括屏幕保护程序…)
- 防病毒软件(主要在Windows上)
- 系统或守护进程(并且有很多)
- 多任务管理
datetime.datetime.now()
,它将为您提供微秒分辨率:
>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2014, 7, 15, 14, 31, 1, 521368)
>>> i = datetime.datetime.now()
>>> q = datetime.datetime.now()
>>> (i-q).seconds
86389
>>> (i-q).microseconds
648299
>>> i.microsecond
513160
这就是我害怕的。。。由于我“只”需要一个相对的时间(每个命令之间的时间间隔为1ms),您知道一种精确的方法吗?您这样做的能力将高度依赖于您的硬件和操作系统。如果
time.clock
不能提供您所需的精度,那么唯一真正的建议是尝试不同的硬件。分辨率/精度与精度不一样。谢谢,它确实会稍微提高精度,因为现在的色散在0.5到8毫秒之间。