當(dāng)django中使用了多線程時(shí),由于uwsgi默認(rèn)不開啟多線程,所以我們需要為uwsgi手動(dòng)開啟多線程。
閑言少敘,直接上配置。
在uwsgi 的配準(zhǔn)文件 uwsgi.ini 中 增加下面的 threads字段

21611729472_.pic_hd.jpg
processes = 4
threads = 2
代表開啟4個(gè)進(jìn)程處理客戶端的請(qǐng)求,每個(gè)進(jìn)程有兩個(gè)線程。
這樣就可開啟多線程。
具體項(xiàng)目中遇到的應(yīng)用場(chǎng)景
任務(wù)背景
django部署的一個(gè)爬蟲服務(wù)??蛻舳税l(fā)送一個(gè)請(qǐng)求后,django立即開啟一個(gè)線程,去執(zhí)行耗時(shí)的爬蟲任務(wù), django不等待爬蟲結(jié)果,便先返回給客戶端“請(qǐng)等待”的提示,在爬蟲任務(wù)執(zhí)行完畢后,再通過輪詢或websocket返回給客戶端爬蟲任務(wù)的結(jié)果。
遇到的問題
使用 django的 runserver 運(yùn)行項(xiàng)目沒問題,但當(dāng)使用 nginx+ uwsgi 運(yùn)行項(xiàng)目時(shí),爬蟲的HTTP請(qǐng)求不返回結(jié)果;當(dāng)使用 uwsgi單獨(dú)拉起項(xiàng)目時(shí),爬蟲的HTTP返回結(jié)果但速度奇慢。
解決方法
最后發(fā)現(xiàn)是uwsgi 默認(rèn)不支持多線程,需要開啟多線程(方法如上),即可解決問題。