我想逐行读取文件并以固定间隔输出每一行。
该脚本的目的是重放一些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倍的感觉似乎不仅仅是巧合。
通常,当我像这样被困住时,这意味着我正朝错误的方向前进,我需要指出一种更明智的方法,因此所有建议都将受到欢迎。
答案 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()