美文网首页
django多进程连接数据库主进程要关闭数据库连接

django多进程连接数据库主进程要关闭数据库连接

作者: 仁安天下 | 来源:发表于2019-10-13 01:16 被阅读0次

多进程连接数据库,开启子进程时,主进程要记得关闭数据库连接

response = {"result": True, "message": ""}
q = Queue()
t1=Process(target=saveThreat, args=(q,))
threatTmps_l = ThreatTmp.objects.all()
servers = Server.objects.all()
id = int(round(time.time() * 1000))
ips = threatTmps_l.values_list("ip", flat=True).distinct()
connection.close()
t1.start()

这个问题,在window系统下是正常的,部署到linux下后就会报错mysql is gone way等等,以前没有时间看,今天补了一下这方面的知识。
Linux系统在Fork创建子进程时引入了“写时复制”技术,也就是只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程。在创建子进程之后,两个进程用的是相同的物理空间(内存区),子进程的代码段、数据段、堆栈都是指向父进程的物理空间,也就是说,两者的虚拟空间不同,但其对应的物理空间是同一个。当父、子进程中有更改相应段的行为发生时,再为子进程相应的段分配物理空间。
通过multiprocessing.Process在linux中创建的子进程,会复制到父进程内存中留存的sockets,也就是说,子进程向数据库发起操作,是基于父进程socket已经和数据库完成连接的情况下进行的。如果父进程连接断开,那么子进程将无法进行数据库操作。
对我这边的情况就是:
在linux中,主进程不关闭数据库连接,开启子进程,当主进程完成数据库操作后,就断开连接了,此时子进程无法对数据库进行操作就报错了;而主进程主动关闭数据库连接后,子进程自己创建一个不依赖主进程的socket连接,这样,即使主进程结束了,子进程也不会报错
在windows中,关不关数据库连接都没有影响,因为主进程和子进程没有任何联系。

相关文章

  • django多进程连接数据库主进程要关闭数据库连接

    多进程连接数据库,开启子进程时,主进程要记得关闭数据库连接 这个问题,在window系统下是正常的,部署到linu...

  • 【django】多进程连接Mysql异常

    场景: 我遇到的情况是Django下多进程连接数据库异常,设置为每次连数据库前先断开之前的连接就可以了。 报错: ...

  • 数据库连接池

    数据库连接池介绍 在没有连接池,需要程序直接向数据库获取连接,频繁对数据库进行连接会使数据库宕机,进程直接被结束;...

  • 删除sql链接

    spid即为进程id kill 进程id即可删除对应进程。 数据库名:testdb2 1. 查询数据库当前连接 2...

  • postgresql删除数据库失败:DETAIL: There

    在终端执行:dropdb earth 连接数据库 查看现有的连接: 退出数据库并,删除掉pid对应的进程 删除数据库

  • Django连接MySQL数据库

    1.1.Django项目连接mysql数据库 Django项目要操作数据库,首先要和数据库建立连接,才能让程序中的...

  • python连接mysql、sqlserver、oracle、p

    包括python连接数据库,以及django下配置连接数据库

  • ansible的异步操作小练习

    通过ansible实现的ssh远程连接开启一个进程,当ssh远程连接关闭时,进程也会随之关闭,如果在ssh远程连接...

  • 门罗币挖矿病毒

    查看所有外部连接 正在连接的,已经关闭连接的 如果发现有连接异常IP找到相关进程 查询进程 通过netstat找到...

  • NodeJS 数据库连接池配置

    使用 NodeJS 连接数据库的时候,要及时关闭数据库连接,否则时间长了会出现“数据库连接过多“的报错,也就是说数...

网友评论

      本文标题:django多进程连接数据库主进程要关闭数据库连接

      本文链接:https://www.haomeiwen.com/subject/akqhmctx.html