import os
import datetime
from time import sleep
from threading import Thread
def async(f):
"""
"""
def wrapper(*args, **kwargs):
thr = Thread(target=f, args=args, kwargs=kwargs)
thr.start()
return wrapper
@async
def update_log_async(file_path, log_wait_seconds=1):
"""
异步方法,增量解析日志
"""
def read_file(file_path, file_loc):
"""
增量读取文件
"""
if not os.path.exists(file_path):
return [], file_loc
fp = open(file_path, "r")
fp.seek(file_loc, 0) # 把文件读取指针移动到之前记录的位置
log_list = fp.readlines() # 接着上次的位置继续向下读取
file_loc_new = fp.tell() # 获取最新的位置
fp.close()
return log_list, file_loc_new
def is_finished(log_list):
"""
判断是否完成
"""
for log_text in log_list:
if "success" in log_text:
return True
return False
def parse(log_list):
"""
这里实现解析代码
"""
print(datetime.datetime.now())
print(log_list)
file_loc = 0
while True:
log_list, file_loc = read_file(file_path, file_loc)
parse(log_list)
sleep(log_wait_seconds)
if is_finished(log_list):
break
def generate_log_file(file_path, wait_seconds=10):
for i in range(1, 12):
with open(file_path, "a+") as fp:
for j in range(i):
fp.write(str(i) + str(j) +"\n")
if i % 5 == 0:
fp.write("success\n")
sleep(wait_seconds)
file_path = "./test_log.txt"
update_log_async(file_path, 1)
generate_log_file(file_path, 3)