首页 > 解决方案 > 如何在 prefork celery 环境中正确使用 psycopg2?

问题描述

问题

我有一个芹菜工人(prefork 模式,4 个进程)。在 celery 的异步任务中,我使用psycopg2操作数据库(postgresql)。每次重启 celery 都可以完成一个任务,但是当第二个任务来操作数据库时,出现错误:InterfaceError: cursor already closed

我在文档中找到了一些东西,它说:

分叉进程不应使用连接,因此当使用诸如多处理之类的模块或诸如 FastCGI 之类的分叉 Web 部署方法时,请确保在分叉之后创建连接。

这是我错误的原因吗?如果为真,psycopg2在 celery prefork 模式下使用 lib 的正确方法是什么?

(也许在任务开始时建立数据库连接并在结束时关闭它太昂贵了?)

标签: pythoncelerypsycopg2

解决方案


推荐阅读