背景:
我正在使用一个使用Django和Postgres数据库的项目.我们也在使用mod_wsgi以防万一,因为我的一些网络搜索提到了它.在Web表单提交中,Django视图启动了一项需要花费大量时间的工作(超过用户想要等待的时间),因此我们在后台通过系统调用启动工作.现在运行的作业需要能够读取和写入数据库.因为这项工作需要很长时间,所以我们使用多处理来并行运行部分工作.
问题:
顶级脚本具有数据库连接,当它生成子进程时,似乎父级的连接可供子级使用.然后有一个例外,关于如何在查询之前调用SET TRANSACTION ISOLATION LEVEL.研究表明,这是因为尝试在多个进程中使用相同的数据库连接.我发现一个线程建议在子进程的开头调用connection.close(),这样Django会在需要时自动创建一个新连接,因此每个子进程都有一个唯一的连接 - 即不共享.这对我来说不起作用,因为在子进程中调用connection.close()会导致父进程抱怨连接丢失.
其他调查结果:
我读过的一些东西似乎表明你不能真正做到这一点,而且多处理,mod_wsgi和Django不能很好地结合在一起.我觉得这似乎很难相信.
有人建议使用芹菜,这可能是一个长期的解决方案,但我目前无法安装芹菜,等待一些批准程序,所以现在不是一个选项.
在SO和其他地方找到了关于持久数据库连接的几个参考资料,我认为这是一个不同的问题.
还找到了关于psycopg2.pool和pgpool的引用以及关于bouncer的内容.不可否认,我不理解我正在阅读的大部分内容,但它肯定不会像我一样对我跳出来.
目前的"解决方案":
就目前而言,我已经恢复了只是连续运行的东西,它可以工作,但比我想要的慢.
关于如何使用多处理并行运行的任何建议?好像我可以让父母和两个孩子都拥有与数据库的独立连接,事情就可以了,但我似乎无法得到那种行为.
谢谢,抱歉这个长度!