Apache上的多进程Flask应用程序

时间:2018-03-15 19:24:11

标签: python apache flask mod-wsgi python-multiprocessing

我正在尝试使用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上遇到过这个问题。它在单个线程上运行,但可以处理多个请求。

1 个答案:

答案 0 :(得分:1)

它一次只能处理一个请求,因为这是你告诉mod_wsgi在使用时要做的事情:

threads=1

不要设置该选项,它将默认为守护程序进程组中的15个线程,因此它可以同时处理多少个请求。

如果您的请求是I / O绑定,那么开始时应该没问题,您可以稍后调整一下。如果您的请求比I / O绑定的CPU绑定更多,那么也开始引入其他进程并在它们之间分发请求。

processes=3 threads=5

即使严重的I / O绑定,也不要在每个进程中增加太多的线程,最好仍然将它们分散到进程中,因为Python不能同时处理每个进程的大量线程。

有关更多信息,请阅读文档: