2017-08-28 270 views
1

我有一個django應用程序,我在其中使用python Thread模塊來執行多線程,它通過manage.py使用django開發服務器時工作正常。 但是,當我部署在Apache - mod_wsgi,它不工作.join失敗,線程無法正常工作。任何人都可以幫助確切的Apache配置?python django wsgi multithread - 如何在django中使用多線程

我試着保留一些如下所示的多線程和多進程配置。但仍然沒有工作。 我的配置 - 聽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

沒有什麼在mod_wsgi的阻止你使用線程,雖然在一個Web應用程序在後臺運行的往往是一個壞主意。根據你在做什麼,你應該使用一個單獨的任務排隊系統,如Celery。

一件突出的事情表明你要走錯了方向,那就是你已經設置了threads=255。這是接受請求的併發線程數。設置這麼高的數字幾乎總是一個非常糟糕的主意。

現在,您已經在2550個線程的所有mod_wsgi守護進程中設置了一個請求線程池大小,這比Apache本身甚至可以進行代理的方式要多得多。所以這只是一種永遠不會被使用的內存浪費。

即使是25個線程也會被視爲高線程,如果進程執行高CPU任務時絕對不想使用大量線程,因爲線程模型和Python的GIL並不實用。

你爲什麼使用這麼多的線程?這個數字與你創建自己做任何東西的任何後臺線程無關,它只是表示Web請求處理程序線程的數量。

建議您實際顯示一些關於您嘗試運行的實際線程代碼。 Apache/mod_wsgi配置實際上與它無關。

+0

感謝格雷厄姆的答案。我不需要在這裏保存wsgi-apache配置中的線程。我雖然保持這種配置將允許線程在python ..我只是想在後端運行線程。芹菜會在後端幫助我嗎?你能分享一些有例子的鏈接嗎?我已經去了芹菜文檔,但它看起來complect我..我使用線程模塊在後端做一些平行的工作。 – user8525895