如何控制和关闭python 线程

碰到这样一个需求。
1、前端页面 每秒需要发出一个ajax请求。
2、django后端某个view接受到这个请求后,需要向第三方API异步get请求10个数据
3、这些数据会渲染到前端页面。

view中的get请求代码如下,其中用了grequests异步请求:

desc_ip_list=['58.222.24.253', '58.222.17.38']

reqs = [grequests.get('%s%s' % ('http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=', desc_ip))

for desc_ip in desc_ip_list]

response = grequests.map(reqs)

现在的问题是 前端不停的发送ajax请求。 查看python的线程会不断增加,直到报错(无法开启新线程)

**error: can't start new thread
<Greenlet at 0x110473b90: <bound method AsyncRequest.send of <grequests.AsyncRequest object at 0x1103fd1d0>>(stream=False)>
failed with error**

图片描述

所以想问的就是从代码层面如何控制 python的线程?或者说当之前的请求结束之后 如何关闭之前的线程?

回答:

这不是线程的问题, 而是设计的问题。 通常这种需求的较为合理的设计方法:

  1. 增加一个异步任务系统, 不需要自己写, 用 celery 框架。

  2. view 接到请求之后, 存一条数据到数据库, 并且状态设为 “未完成”, 然后调用celery。 因为celery是异步系统, 所以view立刻返回。

  3. 当celery完成操作之后, 将这条记录的状态设置为“已完成”

  4. ajax 继续不断查询view, 通过view再查询view, 根据得到的 “未完成” 或者 “已完成” 状态, 显示相应的信息。

以上步骤听起来复杂, 有过做异步系统的经验就不难了。 祝你好运

以上是 如何控制和关闭python 线程 的全部内容, 来源链接: utcz.com/a/160955.html

回到顶部