如何跨不同用户共享数据库连接,如会话?

时间:2011-07-18 07:09:33

标签: python apache sqlalchemy mod-wsgi

我们正在使用Soaplib - Soap Server和apache / mod_wsgi以及sqlalchemy作为ORM进行mysql连接。

我们尝试使用global dict来存储sqlalchemy - makesession连接处理的数据库会话。

但是当我们使用mod_wsgi将代码移动到生产环境时,它将无法工作,因为它为每个请求创建了不同的进程

所以目前我们已设置WSGIDaemonProcess example processes=1 threads=1,但这不是一个好的解决方案。

使用全局数据库连接池跨所有请求共享数据库会话的理想解决方案是什么?

1 个答案:

答案 0 :(得分:0)

不会为每个请求创建新进程。您可能正在做的是您使用Apache prefork MPM以嵌入模式运行。 Apache将创建许多进程来处理请求,您的请求可能依次由不同的进程处理。最终请求将返回并由之前使用过的进程处理,因此点击缓存连接。

通常使用嵌入式模式和prefork MPM是一个坏主意。使用守护程序模式并使代码线程安全并使用多线程进程。如果您不了解如何使代码线程安全,那么使用少量单线程守护进程模式进程。即,

WSGIDaemonProcess example processes=4 threads=1
WSGIProcessGroup example

这仍然比Apache prefork MPM和嵌入式模式更好,因为它是一个固定的数字,在嵌入模式下,数量可以增长得更大,Apache也可以杀掉并重启进程。使用守护进程模式,进程将始终具有该配置的持久性。