2016-11-30 37 views
1

我想将websocket功能添加到现有应用程序。该应用程序的现有结构是指定eventlet wsgi服务器的进程数

/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调用都会挂起。此外,如果长期runnign过程失败,该应用程序是停留在悬挂的状态

/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
  • 确切答案的问题:Eventlet内置WSGI没有支持多个进程。
  • 方法获得所描述问题的最佳解决方案:共享包含重现问题所需的绝对最小代码的一个文件。也许在这里https://github.com/eventlet/eventlet/issues或任何你喜欢的其他方式。
  • 希望之路。随机的东西捅在:eventlet.monkey_patch(),隔离Eventlet和长期阻塞调用在单独的线程或进程。