我正在编写一个应用程序,用于从类似计算机的覆盆子pi输出假MSF signal,以便将无线时钟与NTP服务器同步。该应用程序是用python编写的,我可以控制我计划用于输出信号的引脚,但我需要将python脚本与系统时钟同步。我已经找到了如何睡眠相对准确的时间段但是我没有找到任何能让我在指定的系统时间(例如下一分钟的顶部)以合理的准确度(在100mS左右)内触发功能的东西)
答案 0 :(得分:0)
由于这是一个异步调用(独立于程序在其余时间执行的操作,我会使用asyncio
的{{3}}它同步到系统时钟。如果你得到所需的精度取决于系统时钟,但在我在Linux下运行的机器上,它通常具有几毫秒内的精度(我还没有在Raspberry Pi上测试过)。一个简单的Python 3示例如下所示: / p>
import asyncio
import datetime
import time
def callback(loop):
print('Hello World!')
loop.stop() # Added to make program terminate after demo
event_loop = asyncio.get_event_loop()
execution_time = datetime.datetime(2017,8,16,13,37).timestamp()
# Adjust system time to loop clock
execution_time_loop = execution_time - (time.time() - event_loop.time())
# Register callback
event_loop.call_at(execution_time_loop, callback, event_loop)
try:
print('Entering event loop')
event_loop.run_forever()
finally:
print('Closing event loop')
event_loop.close()
这个例子应该写成'Hello,World!' 2017年8月16日,UTC时间13:37请注意,事件循环中的时间不是系统时间,因此您需要在事件循环时间内表达所需的执行时间。要在执行任务后不停止程序,请在回调结束时删除loop.stop()
。