Ошибка значения: слишком много файловых дескрипторов в select()- Python-Flask-SocketIO-Threading

#python-3.x #flask #python-multithreading #wsgi #flask-socketio

#python-3.x #flask #python-многопоточность #wsgi #flask-socketio

Вопрос:

У меня есть веб-приложение, использующее модуль python flask, который имеет реализацию flask_socketio для связи между сервером и клиентом. Клиент вызовет API в приложении, метод вызовет функцию в потоке и вернет ответ. Функция thread выполнит несколько HTTP-запросов и также получит сообщения сокета.

После нескольких часов / нескольких выполнений я получаю следующую ошибку

(10160) wsgi завершен, is_accepting= True Исключение в потоке Thread-1: Трассировка (последний последний вызов): Файл «C:UserstestAppDataLocalProgramsPythonPython36libthreading.py «, строка 916, в файле _bootstrap_inner self.run() «C:UserstestAppDataLocalProgramsPythonPython36libthreading.py «, строка 864, в run self._target(*self._args, **self.kwargs) файл «C:UserstestAppDataLocalProgramsPythonPython36libsite-packagesflask_socketio_init.py «, строка 578, в файле run_server log_output=log_output, **kwargs) «C:UserstestAppDataLocalProgramsPythonPython36libsite-packageseventletwsgi.py «, строка 990, в сервере client_socket, файл client_addr = sock.accept() «C:UserstestAppDataLocalProgramsPythonPython36libsite-packageseventletgreeniobase.py «, строка 230, в accept self._trampoline(fd, read=True, timeout=self.gettimeout(), timeout_exc=_timeout_exc) Файл «C:UserstestAppDataLocalProgramsPythonPython36libsite-packageseventletgreeniobase.py «, строка 210, в файле _trampoline mark_as_closed=self.mark_as_closed) «C:UserstestAppDataLocalProgramsPythonPython36libsite-packageseventlethubs_init .py», строка 159, в файле trampoline return hub.switch() «C:UserstestAppDataLocalProgramsPythonPython36libsite-packageseventlethubshub.py «, строка 298, в файле switch return self.greenlet.switch() «C:UserstestAppDataLocalProgramsPythonPython36libsite-packageseventlethubshub.py «, строка 350, в файле run self.wait(sleep_time) «C:UserstestAppDataLocalProgramsPythonPython36libsite-packageseventlethubsselects.py «, строка 42, в ожидании r,w, er = select.select(reader_fds, writer_fds, all_fds, секунды) Ошибка значения: слишком много файловых дескрипторов в select()

 app = Flask(__name__)
app.config['SECRET_KEY'] = 'mysecret'
CORS(app)
socketIo = SocketIO(app, cors_allowed_origins="*")
app.debug = True
app.host = '0.0.0.0'


@socketIo.on("data")
def handleMessage(msg):
    socketIo.emit('data', msg)
    return None


@socketIo.on("connect")
def handleMessage():
    print('connect')
    return None


def sendMessage(msg):
    print('inside send message')
    socketIo.emit(('message', 'sending message from rest'))
    return None


@socketIo.on('disconnect')
def test_disconnect():
    print('Client disconnected')
    return None

app.register_blueprint(execution_blueprint)

if __name__ == '__main__':
    socketIo.run(app, host='0.0.0.0', port=5001)
  

Нитки:

 class Compute(Thread):
    def __init__(self, data):
        Thread.__init__(self)
        self.data = data

    def run(self)
        execution(self.data)


def start_thread(data):
    thread_a = Compute(data)
    thread_a.start()
    return "Process Started in Background"