Aru*_*lan 7 python django web-services gil
我知道 GIL 会阻止 python 跨内核运行其线程。如果是这样,为什么在网络服务器中使用 python,youtube、instagram 等公司如何处理它。
PS:我知道像多处理这样的替代方法可以解决它。但是,如果有人可以将其与他们处理的场景一起发布,那就太好了。
Python 用于网络服务器中的服务器端处理,但(通常)不用作网络服务器。
在正常设置下:我们有 Apache 或其他网络服务器来处理很多进程(服务器端)(python 通常使用 wsgi)。注意通常 apache 直接处理“静态”文件。因此,我们有一台 apache 服务器、许多并行 apache 进程(用于处理连接和基本 http)和许多每次处理一个连接的 python 进程。
每个这样的进程都是相互独立的(它们只是使用相同的资源),因此您可以轻松地对服务器端部分进行编程,而不必担心死锁。这主要是一种权衡:代码的性能,以及轻松快速地生成代码而不会出现大问题。但通常使用 python 的网络服务器规模非常好(也在大型网站上),而且服务器比程序员便宜。
注意:流程中只有一个请求也可以提高安全性。
GIL 存在于 CPython 中(用 C 语言制作且最常用的 Python 解释器),其他解释器版本如Jython或IronPython没有这样的问题,因为它们没有 GIL。
\n\n尽管如此,使用 CPython 你仍然可以拥有并发性,只需在 C 中做你的事情,然后在你的 Python 代码中“链接它”,就像 Numpy 或类似的那样。
\n\n另一件事是,即使你的页面使用 Flask 或 Django,当你在生产服务器中设置它时,你有一个 Apache 或 Nginx 等,它们有一个真正的电荷平衡器(或负载平衡器,我不记得了)现在是英文名称)可以同时向许多人提供页面。
\n\n\n\n\n\nFlask\xe2\x80\x99s 内置服务器不适合生产,因为它\xe2\x80\x99t 不能很好地扩展,并且默认情况下一次仅服务一个请求。\n [...]
\n\n如果您想将 Flask 应用程序部署到此处未列出的 WSGI 服务器,请查找有关如何使用 WSGI 应用程序的服务器文档。请记住,您的 Flask 应用程序对象是实际的 WSGI 应用程序。
\n