当django中使用了多线程时,由于uwsgi默认不开启多线程,所以我们需要为uwsgi手动开启多线程。
闲言少叙,直接上配置。
在uwsgi 的配准文件 uwsgi.ini 中 增加下面的 threads字段
processes = 4
threads = 2
代表开启4个进程处理客户端的请求,每个进程有两个线程。
这样就可开启多线程。
具体项目中遇到的应用场景
任务背景
django部署的一个爬虫服务。客户端发送一个请求后,django立即开启一个线程,去执行耗时的爬虫任务, django不等待爬虫结果,便先返回给客户端“请等待”的提示,在爬虫任务执行完毕后,再通过轮询或websocket返回给客户端爬虫任务的结果。
遇到的问题
使用 django的 runserver 运行项目没问题,但当使用 nginx+ uwsgi 运行项目时,爬虫的HTTP请求不返回结果;当使用 uwsgi单独拉起项目时,爬虫的HTTP返回结果但速度奇慢。
解决方法
最后发现是uwsgi 默认不支持多线程,需要开启多线程(方法如上),即可解决问题。