我正在尝试将websocket功能添加到现有应用程序中。该应用程序的现有结构是
在/server/__init__.py
:
from connexion import App
...
connexion_app = App(__name__, specification_dir='swagger/') # Create Connexion App
app = connexion_app.app # Configure Flask Application
...
connexion_app.add_api('swagger.yaml', swagger_ui=True) # Initialize Connexion api
在startserver.py
:
from server import connexion_app
connexion_app.run(
processes=8,
debug=True
)
通过这种方式,我能够指定进程数。有一些长期运行的任务使得必须拥有尽可能多的进程。
我已修改应用程序以包含websocket功能,如下所示。似乎我只有一个进程可用。一旦应用程序尝试运行其中一个长时间运行的进程,所有API调用都会挂起。此外,如果长期运行过程失败,则应用程序将处于挂起状态
在/server/__init__.py
:
from connexion import App
import socketio
...
connexion_app = App(__name__, specification_dir='swagger/') # Create Connexion App
sio = socketio.Server() # Create SocketIO for websockets
app = connexion_app.app # Configure Flask Application
...
connexion_app.add_api('swagger.yaml', swagger_ui=True) # Initialize Connexion api
在startserver.py
:
import socketio
import eventlet
from server import sio
from server import app
myapp = socketio.Middleware(sio, app)
eventlet.wsgi.server(eventlet.listen(('', 5000)), myapp)
我在这里缺少什么?
(旁注:如果您有任何资源可以更好地了解Flask
对象的庞然大物,请指出他们!!)
答案 0 :(得分:1)
eventlet.monkey_patch()
,在单独的线程或进程中隔离Eventlet和长阻塞调用。