我有一个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
答案 0 :(得分:2)
虽然在Web应用程序进程中运行后台任务通常是一个坏主意,但mod_wsgi中没有任何内容阻止您使用线程。根据您的工作,您应该使用单独的任务排队系统,例如Celery。
有一件事表明你正朝着错误的方向前进,那就是你设置了threads=255
。这是接受请求的并发线程数。设置如此高的数字几乎总是一个非常糟糕的主意。
现在,您已经在2550个线程的所有mod_wsgi守护程序进程中设置了请求线程池大小,这比Apache本身甚至可以代理更多。因此,这只是浪费内存,永远不会被使用。
即使25个线程也被视为高,如果进程执行高CPU任务,你绝对不想使用大量线程,因为线程模型和Python的GIL不能实现。< / p>
为什么使用如此多的线程?这个数字与您自己创建的任何后台线程无关,它只表示Web请求处理程序线程的数量。
建议您实际显示一下您尝试运行的实际线程代码。 Apache / mod_wsgi配置实际上与它无关。