如何使用 socketio 从单独的文件中发出?(烧瓶)

har*_*tio 1 python flask socket.io

如何允许单独的文件(在本例中为classes.py)发出 socketio 消息?

classes.py已经知道socketio变量的知识,即使尝试直接导入它也不起作用。

请帮我解决我的问题!

这是我的代码;

app.py
from flask import Flask, render_template, redirect, url_for, request, session, send_from_directory, jsonify
from flask_socketio import SocketIO
from classes import *

app = Flask(__name__)
socketio = SocketIO(app, message_queue='redis://localhost:6379')

if __name__ == "__main__":
    app.debug = True
    socketio.run(app, port=5000, debug=True, use_reloader=True)
Run Code Online (Sandbox Code Playgroud) classes.py
from flask import Flask, request, session, redirect, url_for, jsonify
import requests, json, random, sqlite3
from flask_socketio import SocketIO

class notify:
    def __init__(self, message=None):
        socketio.emit('notification', {'message': message})
Run Code Online (Sandbox Code Playgroud)

我目前的修复

  • 在内部向 发送 POST 请求@app.route(),这会触发socketio.emit()

小智 5

它似乎有一个循环引用。您应该app从入口点划分变量。

应用程序

from flask import Flask, render_template, redirect, url_for, request, session, send_from_directory, jsonify
from flask_socketio import SocketIO

app = Flask(__name__)
socketio = SocketIO(app, message_queue='redis://localhost:6379')
Run Code Online (Sandbox Code Playgroud)

类.py

from app import socketio

class notify:
    def __init__(self, message=None):
        socketio.emit('notification', {'message': message})
Run Code Online (Sandbox Code Playgroud)

主文件

from app import app, socketio
from classes import *

if __name__ == "__main__":
    app.debug = True
    socketio.run(app, port=5000, debug=True, use_reloader=True)
Run Code Online (Sandbox Code Playgroud)