Python 指定eventlet wsgi服务器的进程数
我正在尝试向现有应用程序添加websocket功能。应用程序的现有结构是 在Python 指定eventlet wsgi服务器的进程数,python,flask,socket.io,swagger,eventlet,Python,Flask,Socket.io,Swagger,Eventlet,我正在尝试向现有应用程序添加websocket功能。应用程序的现有结构是 在/server/\uuuuu init\uuuuuuu.py中: from connexion import App ... connexion_app = App(__name__, specification_dir='swagger/') # Create Connexion App app = connexion_app.app # Configure Flask Application ... connex
/server/\uuuuu init\uuuuuuu.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
from server import connexion_app
connexion_app.run(
processes=8,
debug=True
)
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
import socketio
import eventlet
from server import sio
from server import app
myapp = socketio.Middleware(sio, app)
eventlet.wsgi.server(eventlet.listen(('', 5000)), myapp)
在startserver.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
from server import connexion_app
connexion_app.run(
processes=8,
debug=True
)
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
import socketio
import eventlet
from server import sio
from server import app
myapp = socketio.Middleware(sio, app)
eventlet.wsgi.server(eventlet.listen(('', 5000)), myapp)
通过这种方式,我可以指定进程的数量。有一些长时间运行的任务使得有必要拥有尽可能多的进程
我已经修改了应用程序,以包括websocket功能,如下所示。似乎我只有一个流程可用。一旦应用程序尝试运行其中一个长期运行的进程,所有API调用都将挂起。此外,如果长时间运行的进程失败,应用程序将处于挂起状态
在/server/\uuuuu init\uuuuuuu.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
from server import connexion_app
connexion_app.run(
processes=8,
debug=True
)
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
import socketio
import eventlet
from server import sio
from server import app
myapp = socketio.Middleware(sio, app)
eventlet.wsgi.server(eventlet.listen(('', 5000)), myapp)
在startserver.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
from server import connexion_app
connexion_app.run(
processes=8,
debug=True
)
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
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
对象的庞然大物,请告诉我!!)- 问题的确切答案:Eventlet内置的WSGI不支持多个进程
- 获得所描述问题的最佳解决方案的方法:共享一个包含再现问题所需的绝对最小代码的文件。也许在这里或者你喜欢的任何其他方式
- 希望之路。要戳的随机内容:
,在单独的线程或进程中隔离eventlet和长阻塞调用eventlet.monkey\u patch()