Django:通过多处理在数据库中创建数据会导致“客户太多”了吗?

时间:2018-03-24 01:24:00

标签: django postgresql multiprocessing python-multiprocessing

我正在运行我的django应用程序,该应用程序从websocket API获取数据并将其存储在我的PostgreSQL

以下是代码的一部分:

class MyWebsocketClient:
    .
    .
    def process_message(self, msg):
        # Get msg from websocket server forever (until I force to quit the program)
        self.data_buffer.append(msg)
        if len(self.data_buffer) > 3000:             
            pool = Pool(cpu_count() * 2 // 3)
            pool.map_async(store_data, self.data_buffer)
            self.data_buffer = []


def store_data(data_buffer):
    BinanceTick.objects.create(
        field1=self.data_buffer['t'],
        field2=self.data_buffer['p'],
        field3=self.data_buffer['q'],
    )

这种方法很平行。

但是当我尝试在其他界面(例如jupyterdjango-shell-plus)中查询同一个数据库时,发生了错误:

OperationalError: FATAL:  sorry, too many clients already
FATAL:  sorry, too many clients already

为什么会这样?以下是我能想到的:

  1. 即使在完成任务后,每个Pool仍与DB建立连接

  2. 我应该添加pool.close()

  3. 还有什么

  4. 主要问题是什么?

0 个答案:

没有答案