使用apscheduler以固定的间隔读取文件

时间:2019-04-11 19:58:04

标签: python-3.x file-io apscheduler

我想逐行读取文件并以固定间隔输出每一行。

该脚本的目的是重放一些GPS日志文件,同时更新时间/日期字段,因为我正在测试的软件会拒绝与系统时间相距太远的消息。

我正尝试使用 apscheduler ,因为我希望输出速率尽可能合理地接近10Hz,这似乎无法通过简单的睡眠命令来实现。

我是Python的新手,所以我可以在类似这样的任务中对变量的范围有所了解。我最接近完成这项工作的方法是,仅从计划函数中的文件对象中读取行。

import sys, os
from apscheduler.schedulers.blocking import BlockingScheduler

def emitRMC():
    line = route.readline()
    if line == b'':
        route.seek(0)
        line = route.readline()
    print(line)    


if __name__ == '__main__':

   route = open("testfile.txt", "rb")
   scheduler = BlockingScheduler()
   scheduler.add_executor('processpool')
   scheduler.add_job(emitRMC, 'interval', seconds=0.1)
   scheduler.start()

但是,这真的不是一种正确的处理方式,我还看到每条输入行在输出中重复10次,我无法解释。

重复似乎非常一致,我认为这可能是max_workers的缘故,尽管我此后将其设置为1而没有任何影响。

我也将间隔更改为10Hz,重复10倍的感觉似乎不仅仅是巧合。

通常,当我像这样被困住时,这意味着我正朝错误的方向前进,我需要指出一种更明智的方法,因此所有建议都将受到欢迎。

1 个答案:

答案 0 :(得分:0)

我在Executing periodic actions in Python [duplicate] 处找到了一个简单的解决方案,它使用了Micheal Anderson的代码在单个线程中工作。

import datetime, threading, time

def foo():
    next_call = time.time()
    while True:
        print datetime.datetime.now()
        next_call = next_call+1;
        time.sleep(next_call - time.time())

timerThread = threading.Thread(target=foo)
timerThread.start()