Django数据库和线程

Kir*_*iro 7 python mysql django multithreading

在一个模型中,我有update()方法,它更新几个字段并创建一个其他模型的一个对象.问题是我用来更新的数据是从另一个主机获取的(每个对象都是唯一的),它可能需要一些时间(主机可能处于脱机状态,超时设置为3秒).现在,我需要更新几百个对象,每小时3-4次 - 当然连续更新每个对象都不是一个选择,因为它可能需要一整天.我的第一个想法是将它分成50-100个线程,这样每个线程都可以更新自己的部分对象.99%的更新功能时间正在等待服务器响应(只有少量字节的数据,所以ping是问题),我认为CPU不会有问题,我更担心:

  • Django ORM.可以处理吗?获取所有对象,将其拆分并从> 50个线程更新?
  • 解决这个问题是个好主意吗?如果是 - 如何做,不要搞砸数据库?或者也许我不应该关心这么少的记录?
  • 如果这不是一个好方法,怎么做对了?

Ale*_*yev 7

您可以手动执行来自不同线程的操作(例如,使用Queue和执行器池),但您应该注意,Django的ORM管理线程局部变量中的数据库连接.所以每个新线程=与数据库的新连接(对于一个请求,对于50-100个线程来说这不是一个好主意 - 连接太多).另一方面,您应该检查数据库"bandwith".