【发布时间】:2018-02-10 00:47:56
【问题描述】:
所以我有以下 websocket 服务器 api:
//x.py
......
import y
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)
@socketio.on('connected', namespace='/getDefects')
def connected():
y.set_client_sid(request.sid)
y.set_socketio(socketio)
@socketio.on('disconnect', namespace='/getDefects')
def disconnect():
print("Client disconnected")
def sendDefects(def, sid, socketio_input):
socketio = socketio_input
socketio.emit('defects', def, room=sid, namespace='/getDefects')
def processDefWithContext(text):
with app.test_request_context():
y.processDef(text)
@app.route('/Process', methods=['Post'])
def process():
text = request.form.get('text')
thread1 = Thread(target = processDefWithContext, args = (text,))
thread1.start()
response = "Ok"
return response
if __name__ == '__main__':
socketio.run(app, host='127.0.0.1', port=8080)
//y.py
import x
....
clientSid = 0
socketIo = 0
def set_client(sid):
clientSid = sid
def set_socketio(socket_in):
socketIo = socket_in
processDef(text):
....
def = ..
x.sendDefects(def, clientSid, socketio)
所以基本上 x.py 包含一个处理输入和输出请求的 web api。 它使用发布请求 (process()) 获取一些数据,然后在新线程中触发对该数据的一些处理。处理在 y.py 中完成。处理完成后,需要使用来自 x.py 的 websocket 将新数据发送到前端 所以 x.py 导入 y.py 并且 y.py 导入 x.py。问题是当我们从 y.py 调用函数来从 x.py 发送数据 (sendDefects(..)) 时,socketio 不再初始化并且将无法发送它.
到目前为止我找到的解决方案(我不是经验丰富的 Python 程序员)是将 socketio 从 x.py 发送到 y.py (set_socketio()) 并返回然后使用它发送数据。
但这个解决方案似乎有点难看。你能推荐另一种方法吗?
【问题讨论】:
标签: python flask websocket python-import flask-socketio