Mix*_*Mix 4 python mysql django
我用 django 构建了一个 Web 服务器。
并使用一个线程来运行任务,将客户端发送的数据保存到数据库中。
Run Code Online (Sandbox Code Playgroud)while True: ... try: self.dbTarget, created = ClientMonitor.objects.get_or_create(Machine_code=own_MachC) data = self.workQueue.get() #from client sent self.dbTarget.setValue(data) #Custom method assigning self.dbTarget.save() #django ORM except InterfaceError as ee: pass
该线程是长时间运行的,但长时间运行后会抛出InterfaceError,因为mysql服务器因八小时超时而断开连接。
特别是它不能自动重新连接到数据库。创建一个新线程就可以了,但是会增加资源占用。
所以我想在同一线程中关闭连接时重新连接数据库。此外,Django 每个请求都会获得一个新的连接。
如何在同一线程中获得与数据库的新连接?谢谢你!!!
Django 本身使用该函数close_old_connections()
在每个请求开始和结束时关闭超过其生命周期的所有连接。这会检测连接是否早于MAX_AGE
数据库设置中指定的连接,或者是否无法使用。如果您设置的MAX_AGE
超时时间低于数据库的超时时间,则永远不会遇到InterfaceError
由于数据库超时而导致的问题。
from django.db import close_old_connections
while True:
try:
...
finally:
close_old_connections()
Run Code Online (Sandbox Code Playgroud)