使用 SocketIO 从通过线程运行的其他模块发送数据

问题描述 投票:0回答:1

我有一个脚本,看起来像这样。我使用线程运行该函数。

from flask import Flask
from flask_socketio import SocketIO
import threading
import time

def start_process():
    for i in range(50):
        message = "Hello, world!"
        socketio.emit('message', message)
        print(f"Event triggered! {message}")
        time.sleep(1)

app = Flask(__name__)
socketio = SocketIO(app, cors_allowed_origins="")

if __name__ == "__main__":
    threading.Thread(target=start_process).start()
    socketio.run(app, port=1120, debug=False)

如果使用上面的代码,它就可以工作。但实际上我的

start_process
函数在另一个文件中,比如说
process_module.py

我想从其他模块调用函数

start_process
并使用flask_socektio通过套接字发送消息。我已经尝试了一些方法,但仍然没有效果。如何让它发挥作用?

python-3.x multithreading flask-socketio
1个回答
0
投票

你的问题有点模糊,但这是我的尝试。

你的主要脚本

from flask import Flask
from flask_socketio import SocketIO
from process_module import start_process
import threading

app = Flask(__name__)
socketio = SocketIO(app, cors_allowed_origins="")

if __name__ == "__main__":
    threading.Thread(target=start_process(socketio)).start()
    socketio.run(app, port=1120, debug=False)

以及 process_module.py

import time
def start_process(socket):
    for i in range(50):
        message = "Hello, world!"
        socket.emit('message', message)
        print(f"Event triggered! {message}")
        time.sleep(1)

解决方案基本上是将 socketio 作为参数传递给我们导入的外部文件中的 start_process 函数。

© www.soinside.com 2019 - 2024. All rights reserved.