Python Flask SocketIO、eventlet、多处理。进程不兼容
我的代码(Raspbian9-Stretch上的Python3.5)被划分为多个单独的进程,这些进程从main.py运行。下面是我的代码的一个简化示例,我认为这是Flask、socketIO、eventlet与multiprocessing.Process的普通用法。问题是,当我尝试访问连接不同进程的管道时,它挂起 我的理解(如果我完全错了,我也不会感到惊讶)是,这是一个与eventlet和多处理相关的长期问题。截至2018年1月,流程和流程尚未解决。 我的问题是。这似乎是一个常见的用例,但不起作用。那么,您会推荐什么变通方法或不同的方法 ---在webprocess.py中--- ---在main.py中---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月,流程和流程尚未解决。 我的问题是。这似乎是一个常见的用例,但不
您是否考虑过不使用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()