我的django应用程序将django模型保存到远程数据库。有时节省是突然的。为了将应用程序的主线程(* thread_A *)从保存多个对象到数据库的时间间隔中解放出来,我考虑使用collections.deque
将模型对象传送到一个单独的线程(* thread_B *)并且* thread_B *按顺序保存它们。Python GIL:是django save()阻塞?
但我不确定这个计划。 save()
返回新数据库条目的ID,所以它只有在数据库响应后才会“结束”,这是在事务结束时。
是否真的django.db.models.Model.save()
阻止GIL -wise并在交易释放其他的Python线程?
您是否打算在'save()'过程中从任何其他线程访问数据库? –
@DonalFellows在我的具体情况 - 不是本地。一些远程观察者当然可以查询数据库,但这是正常的数据库事务使用。 – Jonathan
[David Beazley's 2011 Pycon GIL presentation](http://www.dabeaz.com/talks/EmbraceGIL/EmbracingGIL.pdf)看起来相关 – Jonathan