Django的python_socketio导致数据库连接未关闭的问题

时间:2019-11-06 10:49:25

标签: django postgresql python-socketio

背景

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 will close the old db connections first中,我们假设主线程是 Thread-1 ,然后在Thread-1中,我们调用socketio函数,它是Thread- 2,由于数据库连接是线程本地的,所以closed_old_connections方法不适用于sockertio(Thread-2)中的数据库连接,因此在长时间创建连接(> CONN_MAX_AGE)之后,Thread-2中的连接仍可能打开,但连接无法使用,将导致问题

OperationError: server_closed_the_connection_unexpectedly
This_probably_means_the_server_terminated_abnormally
before_or_while_processing_the_request.

现在,我通过手动关闭socketio处理函数中的旧数据库连接来解决问题,但是我认为这还不够好,因为我们需要关闭每个处理程序中将调用数据库函数的连接。而且我没有找到根本原因,如果不关闭连接,连接将不可用

0 个答案:

没有答案