调试 Flask 服务超时问题 2024-01-06 最近在项目里遇到个 Flask 内存泄漏的问题,前前后后 debug 了几天。 起因是有人报错,发现某个 Flask 服务出现了请求超过 3 分钟还没有返回结果。查服务日志有很多的 WORKER TIMEOUT,是 gunicorn 的进程超时后 kill 的机制。但是日志只能看到超时的进程 id,看不到是哪个请求超时了。正好这个服务上有一个比较耗时的 API(下称 API A),平均耗时在 ...
在 pytest 中 mock 2022-12-25 最近开始用 pytest 写单元测试,发现 pytest 官方教程内容非常多,而且 pytest 里也有很多 unittest 的内容,很容易让人摸不着头脑。pytest 的 example 也很少/很抽象,因此写篇博客记录一下自己的使用。 由于 pytest 和 unittest 用法的变种很多(如 Mock.asserthascalls 的多个变种,patch 的函数形式和装饰器 ...
常用 Python 代码片段 2021-06-28 requests import requests from lxml import etree headers = { "User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.6) ", "Accept": "text/html,application/xhtml+x ...
Python 异步 2021-05-22 最先接触到异步的,应该是前端,比如 JavaScript,连 Sleep 和 XMLHttpRequest 都是用异步的 Promise 写的。 而这次我正在做的 Web 后端也得用到异步,因为这个后端用到了 Onedrive REST API,每次向 Onedrive 请求需要约 1s,如果不使用异步,这个线程就会卡 1s。如果出现高并发(如图片请求),延时也会成倍的增加。 关于协程,还是推 ...
MySQL 每日备份 2021-02-06 转载备份。 本来是想用 shell 脚本的,但是我个人更熟 Python 脚本,所以选择了 Python。 不需要安装 Python 依赖,只需要有 mysqldump 和 gzip 这两个命令就行,毕竟本质还是在拼接 shell。 > 2022.4.17 更新:既然都写 Python 了,为什么不再封装一个包出来,服务器上直接调包,还能有参数选项自动补全呢?所以就有了我的第一个 PyPI ...
drf-yasg —— Django REST Framework 文档生成 2021-01-25 前两篇:Django 学习笔记 | Dango REST Framework 学习笔记 文档对于后端开发是相当重要,即使是一个人写前后端,如果不写文档,可能前天写的接口今天又不知道了。而且,测试部分是基于文档进行编写的,上过软件工程课程 ...
Django REST Framework 学习笔记 2021-01-25 如果你打算使用 Django 搭建一个 RESTful API 后端,你完全有必要学习 Django REST Framework。 Django REST Framework 提供了 Serializers、APIView、GeneticAPIView、ViewSets、权限管理、搜索、分页等功能。这些功能、特性可以全部加入我们的 RESTful 后端,也可以选一部分加入。 如果你和我一 ...
Django 3.1 学习笔记 2020-12-28 推荐从上往下看。 [官方快速安装指南(3.1 版本)],安装的教程 [官方中文教程(3.1 版本)],开发的教程 [MDN 上的 Django 教程],和上面的教程有重叠,推荐只看[会话]和[用户认证]部分 [Django REST Framework],这是一个基于 Django 的 RESTful 后端框架,为常见 RESTful 操作提供了模板,大大降低 REST AP ...
数据挖掘之 Hadoop Spark 2020-07-02 这里只用到了 Hadoop 的 Hadoop Distributed File System (HDFS),即分布式文件系统。而数据处理是交给 Spark 了。 安装 [Hadoop] 和 [Spark] 在 Linux 下的安装方法 [Hadoop]:https://wangchangchung.github.io/2017/09/28/Ubuntu-16-04%E4%B8%8A%E ...
Python 爬虫 —— Scrapy 2020-07-01 爬虫原理 流程如下: 爬虫告诉引擎,需要爬取哪些链接 urls 引擎把链接发给调度器 调度器收到链接后,进入队列 调度器从队列里取出链接,告诉下载器开始下载 下载完毕 ...