我正在尝试使用Python3 / Flask创建一个简单的Web应用程序,并在Apache上提供它。我无法弄清楚如何让我的应用程序响应多个请求。
这是我的wsgi文件:
import sys
import os
sys.path.insert(0, '/var/www/html/FlaskDeploy')
from apps import app as application
此代码摘自httpd.conf
文件:
<VirtualHost *:80>
DocumentRoot /var/www/html/FlaskDeploy
WSGIScriptAlias / /var/www/html/FlaskDeploy/app.wsgi
WSGIDaemonProcess apps threads=1 python-path=/var/www/html/FlaskDeploy/env/bin:/var/www/html/FlaskDeploy/env/lib/python3.6/site-packages
<Directory /var/www/html/FlaskDeploy>
WSGIScriptReloading On
WSGIProcessGroup apps
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
一切正常,但应用程序逐个运行请求。例如,假设每个用户执行耗时3分钟的繁重数据库操作。在这种情况下,当来自不同位置的3个用户同时打开应用程序时,最后一个用户必须等待9分钟(包括其他操作完成)。
基本上我想创建一个能够处理多个请求的Web应用程序。
我来自NodeJS世界,我从未在NodeJS上遇到过这个问题。它在单个线程上运行,但可以处理多个请求。
答案 0 :(得分:1)
它一次只能处理一个请求,因为这是你告诉mod_wsgi在使用时要做的事情:
threads=1
不要设置该选项,它将默认为守护程序进程组中的15个线程,因此它可以同时处理多少个请求。
如果您的请求是I / O绑定,那么开始时应该没问题,您可以稍后调整一下。如果您的请求比I / O绑定的CPU绑定更多,那么也开始引入其他进程并在它们之间分发请求。
processes=3 threads=5
即使严重的I / O绑定,也不要在每个进程中增加太多的线程,最好仍然将它们分散到进程中,因为Python不能同时处理每个进程的大量线程。
有关更多信息,请阅读文档: