擅长:python、mysql、java
<p>通常,您不必担心Django应用程序中的线程。如果您使用Apache、gunicorn或开发服务器以外的几乎任何其他服务器为应用程序提供服务,那么服务器将产生多个进程并完全避开GIL。例外情况是,如果您在gevent中使用gunicorn,在这种情况下,将有多个进程,但这些进程中也有微线程,在这种情况下,并发性会有所帮助,但您不必自己管理线程来利用它。唯一需要担心GIL的情况是,如果您试图生成多个线程来处理单个请求,这通常不是一个好主意。在</p>
<p>Django save()方法不会释放GIL本身,但是数据库后端会释放(在大多数情况下,save()所花费的大部分时间将用于数据库I/O)。然而,在一个设计良好的web应用程序中,要恰当地利用这一点几乎是不可能的。从你的角度来看,即使是同步完成的反应也应该很快,如果他们做了太多的工作而不能很快,那么用芹菜或其他监工来完成额外的工作。如果您尝试在视图中线程化,则必须在向客户端发送响应之前完成该线程,这在大多数情况下不会有任何帮助,只会增加额外的开销。在</p>