Flask 卡住, 无响应问题
自己学习Flask+Gevent, 做了一个小接口服务器, 但在收到请求后, 打印请求的报文, 并返回正确格式, 运行后会出现收到请求消息后,Flask卡住无响应的的问题, 有时候点击ctrl+C才能继续执行, 网上找过很多方法, 但最后从http.server这个框架中找到了灵感, 因为http.server中如果获取报文时, 同样会出现卡住, 或处理等待30s以上才能响应, 针对Flask, 我也用了相同的思路, 果然速度快了, 也不卡和无响应了.
代码如下:
@app.route('/alert', methods=['POST'])
def req_alert():
print('---------------------')
print(request.headers)
if request.data == b'':
print('请求数据格式为空!')
abort(401)
if request.is_json:
req_str = request.data[0:int(request.content_length)]
req_data = json.loads(req_str, encoding='utf-8')
print_req_data(req_data)
else:
print('请求数据格式不是Json格式')
abort(401)
print('---------------------\n')
headers = request.headers
try:
if req_data['action'] != 'alert' and req_data['action'] != 'alert_release':
abort(401, 'Invalid action')
if headers['message-type'] != 'alert':
abort(401, 'Invalid message-type')
alert_id = req_data['alert_id']
res_data = {
'result_code': '',
'result_desc': 'Success',
'timestamp': int(time.time()),
'data': {'alert_id': alert_id}
}
return res_data
except KeyError:
abort(401, 'Invalid req data')
except Exception as e:
abort(401, 'Invalid req data')
重点在获取报文时是先获取request.content_length, 在通过报文长度直接从request.data中截取有效的信息长度即可. 这样处理速度加快, 也没有再出现卡住的现象. 为什么直接调用request.data, 或request.get_json或其他方式会有卡住的情况, 我具体没有研究, 我个人怀疑是请求的报文信息中除了有效长度内容外, 还有其他信息会占用缓存导致. 写的肤浅, 还请大神指点.
补充:
经过自己一段时间的验证和实践, 上面的方法, 确实可以解决一部分的卡顿的原因. 但真正卡顿的原因还是跟CMD执行有关. 上网查了一些资料, 解决方式如下:
1. 打开CMD命令行窗口
2. 在右击窗口栏, 选择默认项
3. 取消勾选快速编辑功能
4. 保存.
好多CMD执行脚本时会卡住大多数都是因为这个功能引起的. 希望大家能借鉴.
Flask 卡住, 无响应问题的更多相关文章
- 转 -android:程序无响应,你该如何定位问题?
如果MainThread长时间无响应,系统会提示“XXX无响应”,然后用户会关闭.那么,如何定位问题呢?无响应并不像Crash,它抓取不到异常日志,通常我们需要调试,才能定位问题.如何调试呢? 1.在 ...
- Sybase ASE无响应的又一个情况
昨天下午,客户那边的系统管理员给我电话,说有套系统的SYBASE数据库最近有点怪,总是时不时莫名其妙地就忽然卡死,有可能一下子就自动恢复了,也有可能后面一直卡住,只好重启.根据客户反映的状况,初步判断 ...
- 一次Mysql连接池卡死导致服务无响应问题分析(.Net Mysql.Data 6.9.9)
问题: 进程启动后,线程数迅速上升至最小线程数后,缓慢上升(线程池限制)到数千,然后由于线程过多,CPU飙升到90%. 对外表现为Api无响应或连接超时. 背景 有些数据存在于另一个机房,通过内网专线 ...
- rpm yum 等命令无响应的解决方法
yum 安装查询任何东西, rpm 安装查询任何东西,执行后无任何反应,直接卡住,也没任何错误信息给出,只能杀掉进程 # yum install XXXX # yum clean all # rpm ...
- mysql安装到最后一步无响应的问题超简单最有效解决
mysql安装到最后一步无响应的问题超简单最有效解决 无论你是安装过还是没安装过,通过此方法都可以解决.之前我的机器和服务器就是都到最后一步卡住,上网搜索方法都无果.后自己尝试了很多次,亲测64位机和 ...
- 扫描仪扫描文件处理-Photoshop批处理无响应问题
问题描述:Photoshop批处理时候卡死.卡住.无响应问题(出现在处理60M及以上TIFF文件的时候) 解决办法: 调整系统虚拟内存见<扫描-Photoshop批处理内存不足问题解决> ...
- 分析案例:应用服务无响应,任务管理器中发现大量w3wp僵尸进程----等待异构系统WebService返回值
问题描述: 某二次开发的项目反馈,不定期出现应用服务器无响应的情况,登录服务器发现任务管理器中有大量的w3wp僵尸进程. 分析过程: 针对同一进程每隔15秒抓取dump,连续抓取3个,对比 ...
- 调用startActivityForResult,onActivityResult无响应的解决办法
三种情况: 1.执行startActivityForResult,没等到被调用的 Activity 返回,onActivityResult() 就被执行了.找了很久,终于通过小道消息得知,这与 Act ...
- IIS服务器运行一段时间后卡死,且无法打开网站(IIS管理无响应,必须重启电脑)
问题描述: 公司希望使用IIS配合网站显示一些订单跟进的情况并展示出来,所以我们在一台演示的Win7 Pro电脑上安装了IIS,但使用了一段时间后发现每过几天页面就无法正常访问了,而且打开IIS管理器 ...
随机推荐
- 一台服务器配置多个mysql实例
在公司资源紧张的情况下,需要在一台服务器上部署多个数据库实例,现在就来实战一下该情况. 需要启动两个不同的端口,分别是3306和3307 [root@node1 ~]# mkdir /u01/mysq ...
- 2015 ACM Arabella Collegiate Programming Contest
题目链接:https://vjudge.net/contest/154238#overview. ABCDE都是水题. F题,一开始分类讨论,结果似乎写挫了,WA了一发.果断换并查集上,A了. G题, ...
- php-fpm脚本
#! /bin/sh ### BEGIN INIT INFO # Provides: php-fpm # Required-Start: $remote_fs $network # Required- ...
- vfork与fork的区别
vfork()用法与fork()相似,但是也有区别,具体区别归结为以下3点: 1. fork():子进程拷贝父进程的数据段,代码段.vfork():子进程与父进程共享数据段. 2. fork():父子 ...
- DockerFile体系结构(保留字指令)
1.FROM --基础镜像,当前新镜像是基于那个镜像的 2.MAINTAINER --镜像维护者的姓名和邮箱地址 3.RUN --容器构建时需要运行的指令 4.EXPOSE --当前容器对外暴露出的端 ...
- CISCO实验记录九:NAT地址转换
1.静态NAT地址转换 #ip nat inside source static 192.168.12.1 192.168.23.4 //将12.1转为23.4 必须精确到主机IP 而不能是某个网段 ...
- HTTP之基本认证机制
1. 认证 1.1 HTTP 的质询/响应认证框架 HTTP 提供了一个原生的质询/响应(challenge/response)框架,简化了对用户的认证过程. HTTP 的认证模型如下图所示: Web ...
- Linux下使用 Nginx
1. 下载Nginx 下载地址 下载完成后,上传到linux服务器,我上传到了 /opt文件夹下. 2. 安装Nginx前的准备 要想使用Nginx需要安装PCRE库和zlib库,否则直接安装Ngin ...
- concurrency parallel 并发 并行 parallelism
在传统的多道程序环境下,要使作业运行,必须为它创建一个或几个进程,并为之分配必要的资源.当进程运行结束时,立即撤销该进程,以便能及时回收该进程所占用的各类资源.进程控制的主要功能是为作业创建进程,撤销 ...
- Linunx创建软连接、删除软连接、修改软连接
创建: ln -s [目标目录] [软链接地址] ln -s /usr/local/python3/bin/python3 /usr/bin/python3ln -s /usr/local/pytho ...