【问题标题】:How to synchronise events to system clock?如何将事件同步到系统时钟?
【发布时间】:2017-08-15 13:46:05
【问题描述】:

我正在编写一个应用程序,以从类似树莓派的计算机中输出假的MSF signal,以将无线电时钟与 NTP 服务器同步。该应用程序是用 python 编写的,我可以控制我计划用于输出信号的引脚,但我需要将 python 脚本与系统时钟同步。我已经找到了如何在相对准确的时间段内睡眠,但我还没有找到任何可以让我在指定的系统时间(例如下一分钟开始)以合理的准确度(在 100 毫秒左右)触发功能的方法)

【问题讨论】:

标签: python clock


【解决方案1】:

因为这是一个异步调用(独立于程序在其余时间所做的事情,我会使用asyncioAbstractEventLoop.call_at 来完成它与系统时钟同步。如果您获得所需的精度取决于在系统时钟上,但在我在 Linux 下运行的机器上,它通常具有几毫秒内的精度(不过,我还没有在 Raspberry Pi 上测试过)。一个简单的 Python 3 示例如下所示:

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 日 13:37。请注意,事件循环内的时间不是系统时间,因此您需要在事件循环时间中表示所需的执行时间。要让程序在任务执行后不停止,请删除回调末尾的loop.stop()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 2015-06-03
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    相关资源
    最近更新 更多