Django:如何获得与数据库的新连接

Mix*_*Mix 4 python mysql django

我用 django 构建了一个 Web 服务器。

并使用一个线程来运行任务,将客户端发送的数据保存到数据库中。

  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
Run Code Online (Sandbox Code Playgroud)

该线程是长时间运行的,但长时间运行后会抛出InterfaceError,因为mysql服务器因八小时超时而断开连接。

特别是它不能自动重新连接到数据库。创建一个新线程就可以了,但是会增加资源占用。

所以我想在同一线程中关闭连接时重新连接数据库。此外,Django 每个请求都会获得一个新的连接。

如何在同一线程中获得与数据库的新连接?谢谢你!!!

knb*_*nbk 5

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)