PS:我知道有一些替代方案,例如multiprocessing可以解决此问题。但如果有人能提供他们处理过的情况,那就太好了。
Python经常被用于处理服务器端,在Web服务器中使用,但通常不作为Web服务器。
在普通的设置中:我们有Apache或其他Web服务器来处理大量的进程(服务器端)(Python通常使用WSGI)。请注意通常Apache直接处理“静态”文件。因此我们有一个Apache服务器,许多并行的Apache进程(用于处理连接和基本HTTP),以及许多Python进程,每次处理一个连接。
这些进程中的每一个都是独立的(它们只使用相同的资源),因此您可以轻松地编写服务器端部分,而无需担心死锁。这主要是一个权衡:代码性能和轻松快速地生成代码而不会出现巨大问题。但通常具有Python的Web服务器也很好扩展(甚至对于大型站点),而服务器比程序员更便宜。
请注意:通过仅在一个进程中具有一个请求也可以增加安全性。
了解更多关于gunicorn的设计以及如何使用它来帮助您实现需求。这篇文章是关于gunicorn与flask的理解很好的线索。而这个资源则是了解flask应用上下文的绝佳来源。
GIL存在于CPython中(使用C语言编写的Python解释器,使用最广泛),其他解释器版本如Jython或IronPython没有这样的问题,因为它们没有GIL。
即使使用CPython,您仍然可以进行并发操作,只需在C中完成您的任务,然后在Python代码中“链接”它,就像Numpy或类似工具一样。
另一个问题是,即使您的页面使用Flask或Django,当您在生产服务器上设置时,您会有Apache或Nginx等真正的负载均衡器,它可以同时为许多人提供页面服务。
参考Flask文档(链接):
Flask内置的服务器不适合生产环境,因为它无法很好地进行扩展,并且默认情况下一次只能处理一个请求。 [...]
如果您想将Flask应用程序部署到此处未列出的WSGI服务器,请查询服务器文档以了解如何在其中使用WSGI应用程序。请记住,您的Flask应用程序对象是实际的WSGI应用程序。