Python
士多碧莉
不要做程序猿,要做工程狮,吼吼
展开
-
【接口限流】Python实现滑动时间窗口限流
滑动时间窗口,又称rolling window。为了解决计数器法统计精度太低的问题,引入了滑动窗口算法。比如下图,第二个和第三个组成的时间窗口明显不满足限流要求(单位时间内100个请求数)。滑动时间窗口也不是绝对精准的,这取决于拆分的精度,窗口拆分得越精细,窗口也就越平滑,限流得统计也越精确,但是造成的计算量也越大。窗口往后滑动一个小格子(0.1s)后 ,触发限流,由此看出,滑动时间窗口可以很大程度的避免计数器统计法带来的精度问题。时间窗口拆分为更小粒度,再来看看,前1s仍然满足限流要求。原创 2023-03-21 18:30:10 · 932 阅读 · 1 评论 -
【接口限流】简单计数器Python实现固定窗口限流
限流是保证系统可用的一个重要手段,和消息队列相似,都是防止超负荷的流量直接打在服务上造成故障,但又有所不同,消息队列其中一个作用是削峰,但是带来的副作用是异步,业务流程需要配合,而限流则是对请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务、排队或等待、降级等处理。如下图,相同颜色的格子组成1s,假设单位时间(1s)内限流数是100,那么下图的结构是初步满足需求的。分析问题主要的要素有:当前时间窗口内累计请求数、单位时间窗口允许的最大请求数、单位时间大小。更新时间窗口:每单位时间移动一个时间窗口。原创 2023-03-21 17:11:50 · 754 阅读 · 0 评论 -
一次Django SSO简单实现
单点登录(Single Sign On)功能是一个非常常用的功能,尤其是我们在多个系统之间需要登录同步的时候。比如访问腾讯视频和QQ音乐,我登录完QQ音乐后,不想在腾讯视频再登陆一次,可以利用单点登录实现。大家可以去试一下y.qq.com和v.qq.com,在任意平台登录,再访问其他平台无需再登录一次。原创 2022-11-17 10:07:02 · 552 阅读 · 0 评论 -
python 动态导入模块,实现模块热更新
实现对py文件热更新,动态导入原创 2022-08-26 10:24:55 · 2787 阅读 · 0 评论 -
Complete Binary Search Tree 完全二叉搜索树,python实现
关键难点是如何计算左孩子的个数,因为给定一个长度为n的序列,只要知道左孩子个数,就可以根结点的位置,以及右孩子个数等等关键数据。X的值可以根据公式①求出来,需要注意的是X大于。化简后可以求得,②H ≈ log(N+1)输出: 完全二叉搜索树序列(数组表示)已知H后,左孩子数目就可以求出来了 ③。输入: 完全二叉树序列(数组表示)设下图总结点个数为N,得出①。下面用两种方式实现,分别是递归法以及堆栈法。(左子树的最大值),即 X = min{时,即X长到右子树那边去了,只能取。...原创 2022-08-16 11:43:04 · 558 阅读 · 0 评论 -
最短路径算法之三:多源带权图,Floyd算法,python实现
求多源带权图最短路径,Floyd算法,python实现原创 2022-08-11 10:55:16 · 960 阅读 · 0 评论 -
快慢指针求链表的中间节点
问题:给定一个头结点为head的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。咱就是说,看到题目简单的不行,暴力咔咔就解出来了,不就是第一次遍历链表,得出链表长度;第二次遍历链表的一半么。一顿操作猛如虎,结果出来二百五。是通过验证了没错,但这效率也太差了,太不程序员了吧!以下是 朴素解法:咦~(地铁老人)...原创 2022-06-13 20:32:11 · 651 阅读 · 0 评论 -
解决pandas读取xlsx时报错:Must explicitly set engine if not passing in buffer or path for io.
今天在用低版本的pandas==0.24.2时,读取xlsx文件报错。pd.read_excel(xlsx_file_IO_string) # xlsx IO流Must explicitly set engine if not passing in buffer or path for io.查看了源代码,如果未指定engine,那么默认使用xlrd来读,而且我本地的xlrd==1.2.0,所以不存在xlrd版本问题。另外又尝试指定了engine=openpyxl,仍然不能解决读取xl原创 2022-03-27 22:49:19 · 1409 阅读 · 0 评论 -
pandas 数据导出为excel
今天分享一个pandas数据导出到excel的小小经验。默认你已经学会了怎么初始化数据到pandas中。这里只分享导出。导出到# file_path 需要保存的文件路径# table pandas DataFrame对象writer = pd.ExcelWriter(file_path) # 初始化一个writertable.to_excel(writer, float_format='%.5f') # table输出为excel, 传入writerwriter.save()原创 2022-03-27 14:49:05 · 21576 阅读 · 0 评论 -
ValueError: unsupported format character ‘Y‘ (0x59)
今天执行一条SQL时报错,原因是SQL中存在类似DATE_FORMAT的函数,和python的占位符冲突了,需要处理一下。比如原SQL是执行报错:解决:除了这里,还有其他一些相似的内置符号冲突也是这样解决。比如你的正则需要匹配文本中的字符"\",那么正则表达式里将需要4个反斜杠"\\\\"解决内置冲突问题:...原创 2022-03-25 11:41:21 · 1411 阅读 · 0 评论 -
python 获取两个日期之间的所有月份
def get_month_range(start_day:datetime, end_day:datetime): months = (end_day.year - start_day.year)*12 + end_day.month - start_day.month month_range = ['%04d-%02d' % (int(start_day.year + mon//12), int(mon%12+1)) for mon in ran.原创 2022-03-25 11:28:09 · 3323 阅读 · 0 评论 -
如何优雅的终止一个线程
首先,非常不推荐大家强行中止一个运行中的线程,很有可能导致上下文环境没有释放(如锁,文件等)造成严重的后果,但是有的需求它就是奇葩,就是让你不得不强行终止一个线程(恶心),下面给大家介绍几种方法。第一种:通过lambda匿名函数传递终止标志这里我补充一下作用域,lambda函数作为实参传递给了形参stop,传递的是函数的引用,lambda函数有单独的内部作用域,嵌套在do_work函数内,嵌套作用域中的变量只有在嵌套的函数被调用时才进行查找,所以能够通过外部控制stop_threads的值。原创 2022-01-26 16:32:09 · 571 阅读 · 0 评论 -
django 查询优化之 select_related 和 prefetch_related
QuerySet有两个属性,ordered和db;ordered:返回语句是否排序。True or False。db:返回连接的数据库,默认 "default" 数据库。可以使用链式调用组成查询语句,返回new QuerySet对象的方法有:filter() exclude() annotate() alias() order_by() reverse() distinct() values() values_list() dates...原创 2021-12-21 12:49:23 · 1156 阅读 · 0 评论 -
Django QuerySet API 文档阅读(1):懒查询
Django查询返回的数据集对象就是QuerySet,实际上Django是懒查询的,只有当你进行一定的操作时才会到数据库进行查询,否则其实只是查询语句的拼接。那么进行什么操作后,会产生实际的查询呢?Django给出了解释:①遍历数据集;②对数据集进行切片操作;③序列化或缓存数据集;④使用repr方法打印查询集时;⑤使用len方法获取查询集长度时;⑥使用list方法转换为列表时;⑦判断查询集布尔值时;...原创 2021-11-22 15:20:56 · 572 阅读 · 0 评论 -
【踩坑记录】数据库连接未关闭连接,释放资源的坑
今天不聊需求,在代码review时,看到这么一段代码。大家来看一下,这段数据库代码可能引发什么问题?def execute(self, sql): """执行SQL语句方法""" try: conn = self.client.connection() cursor = conn.cursor() cursor.execute(sql) result = cur.fetchall() cur.close()原创 2020-12-15 11:00:54 · 1039 阅读 · 0 评论 -
Django应用启动时如何执行一波初始化添加数据?只需要简单的三步
需求: 希望在运行项目前进行一些数据初始化,包括但不限于一些全局变量、数据库等。实现方法:很简单,只需要三步(1)确保app被注册到settings文件中的install_apps中:(2)在该app的__init__文件中设定default_app_config:default_app_config = 'apps.home.apps.HomeConfig'(3)在该app的apps文件中,继承AppConfig类;重写name属性,重写ready方法;其中na...原创 2020-08-26 11:02:52 · 4997 阅读 · 7 评论 -
介绍一下 linux命令 nohup 和 & 使得程序在后台运行
总所周知 运行命令时想要直接挂在后台 在命令后面加& 这样命令就挂在后台运行了 就算按Ctrl+c 也不会中断 但是程序输出会打印在终端command & 比如:python3 del_instruments.py& 执行命令后会返回一个进程号:如下:[1] 78272 其中,pid=78272...原创 2019-12-27 16:38:48 · 574 阅读 · 4 评论 -
django国际化详细步骤 本人亲测可行
做项目的时候需要做多语言版本,记录一下一面后续忘记首先,修改settings和url 1、增加一个中间件 : 'django.middleware.locale.LocaleMiddleware', 2、添加增加LANGUAGES和LOCAL_PATHSLANGUAGES = ( ('zh-hans', '中...原创 2019-12-17 10:32:48 · 793 阅读 · 1 评论 -
解决错误:"Python.h: No such file or directory"
pip install python3.x-dev即可 你用的哪个版本就写哪个版本原创 2019-12-13 14:51:42 · 5679 阅读 · 1 评论 -
python getattr 用法 含demo
getattr()函数:用于返回一个对象属性值。语法:getattr(object, name[, default])class A(object): foo = 'bar' def add(self, a, b): return a+ba = A()getattr(a, 'foo') #...原创 2019-12-04 19:54:58 · 310 阅读 · 0 评论 -
解决 'str' object has no method decode
遇到需要将emoji表情存入数据库的时候,比如评论内容,微信用户昵称等等,往往不能直接存入数据库,数据库需要转换编码格式但是这样太麻烦了有什么简便的方法吗?答案是有的不管三七二十一把外界获取的字符串先转码再存入数据库,比如>>> '????????????????'.encode('raw_unicode_escape')b'\\U0001f638\\U0001f63b\\U0001...原创 2019-09-05 10:12:07 · 663 阅读 · 0 评论