通过Flask Socket.IO服务的Python while循环分析

时间:2019-04-15 07:16:17

标签: python flask socket.io flask-socketio eventlet

我很好奇目前所处的状态如何更好地解决以下问题。

我提出以下架构:

建筑

这个想法是通过在一个线程中运行Flask Socket.IO并在另一个线程中进行while循环(可以按需向所有连接的客户端发出信号)来使用多线程执行此任务。

  

项目

     
      
  • main.py
  •   
  • analyze.py
  •   
  • webapp.py
  •   

analyze.py

实际程序每隔几秒钟就会从文件中获取内容,如果更改了内容,它将分析其内容并将结果通过Socket.IO推送到所有客户端。

import webapp


def analyze():
    while True:
        message_object = analyzeStuff()
        webapp.send_message(message_object)

webapp.py

在这里,我们实现了实际的Flask Socket.IO端点。为简单起见,以下是我这一边发生的情况的简短快照:

from flask import Flask
from flask_socketio import SocketIO
from flask_cors import CORS

app = Flask(__name__)
CORS(app)
socket = SocketIO(app)

@socket.on('connect')
def test_connect():
    print('Client connected')
    pass

@socket.on('disconnect')
def test_disconnect():
    print('Client disconnected')
    pass

def send_message(data):
    socket.emit('message', data)
    # print('sending message "{}".'.format(data))

main.py

在主线程中,打开Socket.IO线程,然后运行分析。

我正在使用eventlet.monkey_patch()(尽管我不确定它的确切作用)是能够从另一个线程而不是Socket.IO服务器的线程调用.emit

import analyze
import webapp
import threading

import eventlet
eventlet.monkey_patch()


if __name__ == '__main__':

    # Start the server
    webapp_thread = threading.Thread(target=run_web_app)
    webapp_thread.start()

    # Run the Analyze loop
    analyze.analyze()

当前状态运行良好,困难,我目前遇到一些问题,无法将其安装到我正在开发的apache2 wsgi-mode服务器中。

即使如此,这看起来也很丑陋,我不能停止思考应该有更好的方法来做到这一点。有什么建议吗?

0 个答案:

没有答案