我正在使用Django
model
和Oracle
,并且有两个进程分别有数据库连接。
为了使两个进程分别具有数据库连接,我首先在分支进程之前关闭主进程中的连接,然后分叉一个新进程,以防止子进程复制数据库连接。
from django.db import connection
connection.close()
childProcess.start()
因此,每个进程在首次尝试通过Django模型访问数据库时都会重新打开数据库连接。
在这种情况下,在主进程中,它可以正常运行django.db.connection.queries
返回查询信息,但在子进程中它总是返回一个空列表。
如何使用django.db.connection.queries
在子进程中获取查询信息?
答案 0 :(得分:1)
我发现我问的问题出了什么问题。
在子进程中,它创建一个新的线程。
此线程仅监视由主线程操作的查询(在子进程中)。
我认为connection
提供的Django
对象是进程中的global
资源。(这就是为什么我将线程规则分开,一个是运行查询而另一个是运行查询是监视查询。)
但是,经过一系列测试后,我发现connection
对象只收集Thread操作的查询信息。
这意味着每个线程运行django.db.connection
而不是进程。
因此,我误认为问题是多处理问题的原因。