【发布时间】:2012-05-24 18:37:25
【问题描述】:
我的 django 应用程序将 django 模型保存到远程数据库。有时扑救是突发的。为了将应用程序的主线程 (*thread_A*) 从将多个对象保存到数据库的时间成本中解放出来,我考虑使用 collections.deque 将模型对象传输到单独的线程 (*thread_B*) 并拥有 * thread_B* 按顺序保存它们。
但我不确定这个方案。 save() 返回新数据库条目的 id,所以它只有在数据库响应后才“结束”,也就是事务结束。
django.db.models.Model.save() 是否真的会阻塞 GIL-wise 并在交易期间释放其他 Python 线程?
【问题讨论】:
-
您是否打算在
save()期间从任何其他线程访问数据库? -
@DonalFellows 在我的具体情况下 - 不是本地的。一些远程观察者当然可以查询数据库,但这是正常的数据库事务使用。
-
collections.deque线程安全吗?threading.Queue似乎更适合这份工作。 -
collections.deque是线程安全的(RTM)
标签: python django multithreading transactions gil