在Flask服务器中优化gevent的greenlets

问题描述

我在refresh函数中可用于Wsgi服务器的操作如下:readable,writeable,_ = select.select(rsockets,[],1),我认为此代码行可能会导致危险情况。如何优化此代码

import gevent
from gevent.pywsgi import WsgiServer
from geventwebsocket.handler import WebSocketHandler

def main():
    http_server = WsgiServer((servers_manager.host,servers_manager.port),app,handler_class=WebSocketHandler)

    srv_greenlet = gevent.spawn(http_server.serve_forever)
    alarm_greenlet = gevent.spawn(refresh)
    
    gevent.joinall([srv_greenlet,alarm_greenlet])
def refresh(self):
    servers = ServiceSettings.objects.all()
    for server in servers:
        fserver = self.find_or_create_server(server)
        if fserver:
            fserver.auto_start()

    while not self._stop_listen:
        rsockets = []
        for server in self._servers_pool:
            if server.is_connected():
                rsockets.append(server.socket())

        readable,1)
        for read in readable:
            for server in self._servers_pool:
                if server.socket() == read:
                    server.recv_data()
                    break

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)