【问题标题】:python django wsgi multithread - how to use multithread in djangopython django wsgi 多线程 - 如何在 django 中使用多线程
【发布时间】:2017-08-28 06:50:09
【问题描述】:

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

【问题讨论】:

    标签: python django apache mod-wsgi


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 感谢格雷厄姆的回答。我不需要在 wsgi - apache 配置中保留线程。我虽然保留此配置将允许在 python 中进行线程化.. 我只是想在后端运行线程。那么芹菜会在后端帮助我吗?你能分享一些有例子的链接吗?我已经浏览了 celery 文档,但对我来说它看起来很复杂。我正在使用 Thread 模块在后端做一些并行工作。
    猜你喜欢
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多