我的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