Skip to main content
 首页 » 编程设计

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

2024年10月01日35zhwl

我有一个 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 

请您参考如下方法:

mod_wsgi 中没有任何东西可以阻止您使用线程,尽管在 Web 应用程序进程中运行后台任务通常不是一个好主意。根据您的工作,您应该使用单独的任务队列系统,例如 Celery。

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

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

即使是 25 个线程也会被认为是高线程,如果进程正在执行高 CPU 任务,您绝对不想使用大量线程,因为 Python 的线程模型和 GIL 不实用。

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

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