django 多线程 + uWSGI 多线程 遇到的坑

当django中使用了多线程时,由于uwsgi默认不开启多线程,所以我们需要为uwsgi手动开启多线程。

闲言少叙,直接上配置。

在uwsgi 的配准文件 uwsgi.ini 中 增加下面的 threads字段

21611729472_.pic_hd.jpg

processes = 4
threads = 2
代表开启4个进程处理客户端的请求,每个进程有两个线程。

这样就可开启多线程。

具体项目中遇到的应用场景

任务背景

django部署的一个爬虫服务。客户端发送一个请求后,django立即开启一个线程,去执行耗时的爬虫任务, django不等待爬虫结果,便先返回给客户端“请等待”的提示,在爬虫任务执行完毕后,再通过轮询或websocket返回给客户端爬虫任务的结果。

遇到的问题

使用 django的 runserver 运行项目没问题,但当使用 nginx+ uwsgi 运行项目时,爬虫的HTTP请求不返回结果;当使用 uwsgi单独拉起项目时,爬虫的HTTP返回结果但速度奇慢。

解决方法

最后发现是uwsgi 默认不支持多线程,需要开启多线程(方法如上),即可解决问题。

你可能感兴趣的:(django 多线程 + uWSGI 多线程 遇到的坑)