python_socketio с django вызывает проблему с подключением к БД - PullRequest
0 голосов
/ 06 ноября 2019

Backgroud :

django + Postgres + socketio

Описание :

python_socketio : я создаю синхронизирующий сокет для обработки некоторых функций, и он создает постоянный поток для обработки событий sockerio

django : в дескрипторной функции django я вызываю socketioметод, такой как:

class MyDangoHandler(object):
    def myfunction(self):
        socket_io_client.emit(
            event=ClientEvents.MyEvent,
            data={
                "id": 1
            }
        )

и в обработчике событий sockerio я вызову базу данных postgres для получения некоторых данных.

Мы знаем, что в запросе django закроетсястарые соединения с БД сначала , мы предполагаем, что основной поток равен Thread-1 , затем в Thread-1 мы вызываем функцию socketio, это Thread-2, поскольку соединение с dbthreadlocal, поэтому методы closed_old_connections непригодны для соединений db в sockertio (Thread-2), поэтому после длительного создания соединения (> CONN_MAX_AGE) соединения в Thread-2 могут по-прежнему открываться, но соединение непригодно для использования. вызовет проблемуm

OperationError: server_closed_the_connection_unexpectedly
This_probably_means_the_server_terminated_abnormally
before_or_while_processing_the_request.

Теперь я решаю проблему, закрывая старые соединения с БД в функциях обработчика socketio вручную, но я не думаю, что это достаточно хорошо, потому что нам нужно закрыть соединения в каждом обработчике, который вызоветфункция базы данных. И я не нашел основную причину, по которой соединения будут непригодными, если они не будут закрыты

...