python django wsgi multithread - 如何在django中使用多线程

时间:2017-08-28 06:50:09

标签: python django apache mod-wsgi

我有一个django应用程序,其中我使用python Thread模块进行多线程,它通过manage.py使用django开发服务器时工作正常。 但是,当我部署在apache - mod_wsgi上时,它无法工作.join失败并且线程无效。任何人都可以帮助完成精确的apache配置吗?

我尝试保留一些多线程和多进程配置,如下所示。但仍然没有工作。 我的配置 - 听8000

Alias /static/ /usr/td/static/
<Directory /usr/td/static/>
    Require all granted
</Directory>

<Directory /usr/td>
    <Files wsgi.py>
     Require all granted
    </Files>
</Directory>
    WSGIDaemonProcess td display-name=myproject processes=10 threads=255 python-path=/usr/td/:/usr/lib/python2.7/site-packages
    WSGIProcessGroup td
WSGIScriptAlias / /usr/td/td/wsgi.py

1 个答案:

答案 0 :(得分:2)

虽然在Web应用程序进程中运行后台任务通常是一个坏主意,但mod_wsgi中没有任何内容阻止您使用线程。根据您的工作,您应该使用单独的任务排队系统,例如Celery。

有一件事表明你正朝着错误的方向前进,那就是你设置了threads=255。这是接受请求的并发线程数。设置如此高的数字几乎总是一个非常糟糕的主意。

现在,您已经在2550个线程的所有mod_wsgi守护程序进程中设置了请求线程池大小,这比Apache本身甚至可以代理更多。因此,这只是浪费内存,永远不会被使用。

即使25个线程也被视为高,如果进程执行高CPU任务,你绝对不想使用大量线程,因为线程模型和Python的GIL不能实现。< / p>

为什么使用如此多的线程?这个数字与您自己创建的任何后台线程无关,它只表示Web请求处理程序线程的数量。

建议您实际显示一下您尝试运行的实际线程代码。 Apache / mod_wsgi配置实际上与它无关。