最近在使用 Flask-SocketIO 想实现实时跟踪 celery
的任务日志(每个任务一个日志文件)的功能。 在本地运行,开了两个窗口,第二个窗口会输出自己的日志,第一个窗口会输入自己的加后一个窗口的日志。类似后续每开的一个窗口,前面的窗口都会 append
此窗口的日志。
client
import sys
import socketio
client = socketio.Client(reconnection=False)
@client.on('log', namespace='/cdc')
def on_log(args):
print(args['data'])
def send(log_path):
try:
client.connect('http://127.0.0.1:5000', namespaces='/cdc')
client.emit('log', {'log_path': log_path}, namespace='/cdc')
except KeyboardInterrupt:
try:
sys.exit(0)
except SystemExit:
sys.exit(1)
server
sio = flask_socketio.SocketIO(async_mode=async_mode)
@sio.on('log', namespace='/cdc')
def log(data):
thread = sio.start_background_task(scan_log, data['log_path'], None, flask.request.sid)
def scan_log(log_path, app=None, client_id=None):
counter = 0
with open(log_path, 'r') as f:
while True:
line = f.readline()
if not line:
sio.sleep(0.1)
continue
counter += 1
sio.emit('log', {'data': line.strip()}, namespace='/cdc', to=client_id)
各位有没有遇到类似的情况?或者有什么大概的思路?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.