Python Flask SocketIO、eventlet、多处理。进程不兼容

Python Flask SocketIO、eventlet、多处理。进程不兼容,python,python-multiprocessing,flask-socketio,eventlet,Python,Python Multiprocessing,Flask Socketio,Eventlet,我的代码(Raspbian9-Stretch上的Python3.5)被划分为多个单独的进程,这些进程从main.py运行。下面是我的代码的一个简化示例,我认为这是Flask、socketIO、eventlet与multiprocessing.Process的普通用法。问题是,当我尝试访问连接不同进程的管道时,它挂起 我的理解(如果我完全错了,我也不会感到惊讶)是,这是一个与eventlet和多处理相关的长期问题。截至2018年1月,流程和流程尚未解决。 我的问题是。这似乎是一个常见的用例,但不

我的代码(Raspbian9-Stretch上的Python3.5)被划分为多个单独的进程,这些进程从main.py运行。下面是我的代码的一个简化示例,我认为这是Flask、socketIO、eventlet与multiprocessing.Process的普通用法。问题是,当我尝试访问连接不同进程的管道时,它挂起

我的理解(如果我完全错了,我也不会感到惊讶)是,这是一个与eventlet和多处理相关的长期问题。截至2018年1月,流程和流程尚未解决。

我的问题是。这似乎是一个常见的用例,但不起作用。那么,您会推荐什么变通方法或不同的方法

---在webprocess.py中---

---在main.py中---


您是否考虑过不使用eventlet来实现此目的?Eventlet和多处理有完全不同的多任务处理方法,它们是不兼容的。您使用的是Eventlet>=0.23吗?我使用的是Eventlet,因为推荐它。我使用的是我认为最新的Eventlet版本0.23.0
#!/usr/bin/python3
def WebFunc(outfrompipe, intopipe):
    global thread

    app = Flask(__name__)
    app.config['SECRET_KEY'] = 'secret!'
    socketio = SocketIO(app, async_mode=”eventlet”)
    thread = None
    thread_lock = Lock()

    @app.route('/')
    def index():
        return render_template('index.html', async_mode=socketio.async_mode)

    @socketio.on('my_event', namespace='/test')
    def test_msg(msg):
        # Receive a message from a web app
        print(“Received message”, msg)
        # Send this message to another process
        # THIS IS WHERE IT HANGS!!
        intopipe.send(msg)

    socketio.run(app, debug=False, host='0.0.0.0')
#!/usr/bin/python3
import webprocess as webproc
import multiprocessing
import time

if __name__ == '__main__':

    multiprocessing.set_start_method('spawn')
    outfrompipe, intopipe = multiprocessing.Pipe()

    wf = multiprocessing.Process(name=”WebProc”, target=webproc.WebFunc,
        args=(outfrompipe, intopipe))
    wf.start()

    while True:
        message = outfrompipe.recv()
        print(message)
        time.sleep(1)

    wf.join()