
Python
Yanbin_Q
真没什么要交待的,保持沉默
展开
-
SciPy 最优化之最小化
SciPy 是一个开源的算法库和数学工具包,可以处理最优化、线性代数、积分、插值、拟合、特殊函数、快速傅里叶变换、信号处理、图像处理、常微分方程求解器等。为什么 SciPy 没有 maximize 方法呢,因为没有必要,想要找到最大化的值,只要把目标函数的值取反,或者是模或绝对值的最小值。虽然 SciPy 对特定的问题有更直白的函数,如求根有 optimize.root, 线性规则 optimize.linprog(现不建议使用),但各种优化基本都可以回归到 minimize 方法调用。原创 2024-12-12 23:05:49 · 336 阅读 · 0 评论 -
Python logging 使用笔记
使用 Python 的话用不着像 Java 那样是考虑用 Logback 还是 Log4J 的问题,因为它内置提供了完备功能的 logging 库。虽然 JDK 也有 java.util.logging(JUL), 它的特性其实也不差,如日志级别,输出格式,不同的输出目的地的选择,但在 Logback 和 Log4J 的光环之下几乎无人问津。相比而言 Python 的 logging 却极为受宠,非必要时基本不会去考虑引入第三方的日志库,如, 尽管它们也很出色,毕竟是庶出。原创 2024-11-26 14:04:16 · 430 阅读 · 0 评论 -
Java, Python 两种形式的 base64encode
在用 Python 写 Web 服务端代码时,用 base64.encodebytes() 函数对字符串进行编码,然后在 Java 端用 Base64.getDecoder().decode() 时无法解码,难道 base64 编码在两种语言间还有这等差异。Google 一下,得到的答案是在 Java 端要用 Base64.getMimeDecoder().decode() 函数解码。这一问题算是解决了, 不过后来又在 Python 写的 AWS Lambda 中输出。原创 2024-11-26 14:02:52 · 177 阅读 · 0 评论 -
配置 FastAPI/Uvicorn/Hypercorn 的访问日志
性能方面普遍是 FastAPI 比 Flask 高,编程方面就各取所好吧,使用 Flask 的时候还是 1.x 的版本,最近用 FastAPI 较多,所以无法对比。FastAPI 本身没提供启动 Web 服务的代码,不像 Flask 还能通过 Flask 对象 或 flask 命令启动一个开发用途的 Web 服务,而 FastAPI 必须用其他的组件(ASGI server)来启动,比如各种 *corn 或 Daphne。原创 2023-05-30 10:55:52 · 1285 阅读 · 0 评论 -
体验 Python FastAPI 的并发能力及线, 进程模型
对于每一种类型 Web 服务基本的测试是每秒发送 2 个请求,连续发送 1000 个,500 秒发送完所有请求,程序中 API 方法接受到请求后 sleep 800 秒,保证在全部 1000 个请求送出之前一直占着连接,并有充足的时间对连接进行分析。在测试极端并发数时,由于在 Mac OS X 尽管设置了 ulimit 最多也只能创建 4000 多一点线程,所以在模拟更多用户数时,JMeter 在远程 Linux(Docker 或虚拟机) 上运行测试用例。以及它是如何运用线程或进程来处理请求。原创 2023-04-05 06:48:38 · 2340 阅读 · 0 评论 -
Python __slots__ 的用法笔记
Python 是一个动态语言,可以动态的给实例或类增减属性或方法,给类添加的属性会影响到前后所有创建的实例。属性可以限定类或实例属性和方法,如果没有。的话实例的属性和方法包含在实例的。字典中,类的属性和方法包含在类的。按常规写法可能会出现的问题大概有。原创 2023-03-01 13:06:24 · 124 阅读 · 0 评论 -
Python Flask 框架的并发能力及线,进程模型
从 JMeter 每半秒发送一个请求,连续发送 1000 个,程序中 API 方法接受到请求后 sleep 800 秒,保证在全部 1000 个请求送出之前一直占着连接,以此来找到同时被处理的请求数目,并且有足够的时间统计当前的 TCP 连接数。在测试极端规模的并发数时,由于在 Mac OS X 很难突破 5000 个线程的限制,这时就让 JMeter 分布到远程 Linux(Docker 或虚拟机) 上执行。虽然网上或许很容易找到它们的默认并发数,但通过实验的方式可以得到更感性的认识。原创 2023-02-24 22:37:14 · 1568 阅读 · 0 评论 -
Python 基于多环境的配置方式
第一种方式是本人推荐的,其他的方式只是在不同格式的配置文件中,按环境组织不同的配置值,其他方式的不同配置读入内存中基本是体现为字典变量。部署到不同环境的应用会使用到各自的配置,如 Dev, QA, Stg, Prod 有自己的数据库等资源。Spring Boot 可采用 Profile 对应不同的环境,不同 Profile 选择自己的配置文件。本人还是偏爱在同一个文件中分组配置,容易查错与编辑,类如在 application.properties 文件中以下面的方式。原创 2023-01-18 13:31:08 · 1107 阅读 · 0 评论 -
向量间距离/相似度及用 Python 进行计算
计算距离的目的也是为了确定两个向量的相似度,这里的向量可以是纯数学的数组,或者是一系列带有某些可量化特征值的物件。写作本文的原由是需要用 Numpy 计算两个实际对象的相似度,实现代码非常简单,因此更不能满足于此,借此机会多多了解下向量之间距离和相似度的概念,还回顾下一些相关的数学知识。本文主要关注到欧氏距离和余弦相似度这两个数值的求解上。计算两个向量的相似度有许多的方法,如。原创 2022-10-11 00:00:52 · 1584 阅读 · 0 评论 -
Python 实现 RSA 非对称加解密
而非对称加密是用一把钥匙反锁门,但只能用另一把特定的钥匙才能打开它,锁门的叫做公钥,开门的叫做私钥。, 大致就是通过互质的两个数,计算欧拉函数, 模反元素,最终算法公钥和私钥,公钥加密的数据只能用用私钥解密,以当前的算力,只要 RSA 的密钥足够长,如 1024 位以上,私钥是无法通过公钥推断出来的。1977 年三位数学家 Ron。在此之前我理解的非对称加密以为是像 MD5 那种摘要(Digest), 由明文生成的 MD5 摘要信息是无法还原出原始数据的,谬以为那就是所谓的非对称。原创 2022-10-10 23:57:47 · 427 阅读 · 0 评论 -
学习 Airflow 第一篇章
Airflow 起初是由 Airbnb 开发的, 用于调度和监控工作流的平台,后来开源了, 并于 2019 年 1 月成为了 Apache 的顶级项目。而 Airflow 功能就厉害了, 它可动态管理工作流,易于扩展,可集群化进行伸缩,更有一个漂亮的 UI 用于实时监控任务。基于以上特性 Airflow 是很适于执行数据的 ETL(Extract, Transform, Load) 操作的。除了商业的 Control-M 有调度和监控工作流的功能外,其他的基本只用来调度任务,监控全靠自己的日志。...原创 2022-08-10 07:31:39 · 178 阅读 · 0 评论 -
Java 调用本地动态库的组件(javah, JNA, JNR-FFI)
还是很 久很久以前,当初有 Java 调用本地动态库需求的时候,尝试过用 javah/native 原生的方式在 Java 中使用动态库,再就是小试了 JNative,它调用动态库只需 Java 端的动作, 它最后的更新日期是 9 年前 2013-04-26,基本是应该选择放弃了。关于 JNative 的使用写过两篇如今想继续发掘下是否有别的更好的调用本地库的 JNI 组件,找到有...原创 2022-07-05 13:32:25 · 516 阅读 · 0 评论 -
Python 3.10 关键新特性
Python 3.10 于 2021-10-04 发布,至今已大半年,目前 AWS 的 Lambda 尚未直接支持,但用 Docker 镜像的方式使用 AWS Lambda 是可以使用 Python 3.10。Python 一年一发布的节奏比 Java LTS 还紧密。下一个版本 Python 3.11 预计在 2122-10-03 发布。在学习 Python 3.10 之前先回顾一下 Python 3.7, 3.8, 3.9 的特性(不想关心之前版本的变迁可直接跳跃到下方的 Python 3.10 新特性原创 2022-07-05 13:31:08 · 405 阅读 · 0 评论 -
Python 中泛型的实现
在学习 Python 3.10 新特性时,其中有个类型别名(TypeAlias), 所举的例子是可写成这让 StrCache 更像是一个类型别名,而不是一个看起来明显就是 的字符串变量(实际上它确实是)。本文不在 TypeAlias 本身,而是从 能看出 Python 似乎也能支持像 Java 那样的泛型, 就像 Python 内置支持的 List[str] 或 list[str] 那样。那么来看 Python 怎么去实现一个只能放入字符串的 Cache, 而不能放入别的类型。 阅读全文 >>...原创 2022-07-05 13:36:15 · 524 阅读 · 0 评论 -
Python 函数重载实现
Python 不支持函数重载,在同一个模块中声明同名方法不会报错,只会不停的覆盖,无论参数个数是否不同,最终只会保留最后一个函数1234567891011121314foo = 100def foo(a): print('foo(a)')def foo(a, b): print('foo(a, b)')def foo(a: str): print('foo(a: str)')foo([8])print(globals()['foo'])foo(3, 5)输出 阅读全文 >>...原创 2022-07-05 13:29:11 · 388 阅读 · 0 评论 -
Python 3.9 新特性回顾
Python 3.10 虽已于 2021/10/04 发布,但目前主要使用的 Python 版本仍然是 3.9。之前有两篇介绍了 Python 3.7 和 3.8带来的新特性Python 3.7所带来的新特性 体验一下 Python 3.8带来的主要新特性于此,再补充一下 Python 3.7 和 3.8 各自的发布日期是 2018/06/27 和 2019/10/14。Python 3.9 是在 2020/10/05 发布,由此看出 Python 是每年一发布。每个版本的主要新特性就是它...原创 2022-07-05 13:27:26 · 347 阅读 · 0 评论 -
Python 连接和操作 DB2 和 Oracle 数据库
使用 Python 就难免要应对到不同数据库连接的问题,Python 目前也没有 Java 使用 JDBC 瘦客户端驱动那么方便。本人在用 Python 连接 SQL Server 时经常还是会有些问题,此文只着力于如何用 Python 连接 DB2 和 Oracle 数据库。从本文中我们将会学到Python 围绕着 ibm_db 来操作 DB2 以 Python DB-API 2.0 规范来操作 DB2 cx_Oracle Python 库 + Oracle Instant Client 操作原创 2022-03-03 13:02:51 · 900 阅读 · 0 评论 -
流畅的 Python 读书笔记(四)
Python 的函数是一等对象因为它符合编程语言理论家对 "一等对象 -- first-class object" 的定义运行时创建 可赋值给变量或数据结构的属性 能作为函数参数 能被函数返回依据这种定义,还有我们最为熟悉的 JavaScript 的函数也是一等对象,Java 的函数都是依附于类或对象存在的,不是一等对象。Python 的文档字符串(docstring) 是放在模块,函数,类中的第一个纯字符串。可用单个引号(单引号或双引),通常因为有大段的文字会用三引号的字符串,比如.原创 2022-03-03 12:59:39 · 152 阅读 · 0 评论 -
流畅的 Python 读书笔记(三)
书中的数据结构还差文本和字节序列那一章未阅读完。Python 的 str 是 unicode 类型,编码在应用方面基本上就是 .decode(), .encode() 方法的调用,默认编解码时用 UTF-8 就行,差不多就不用太深入了。Python 的 bytes 和 bytearray 中的元素都是介于 0 ~ 255(含) 之间的整数,即一个字节,bytes 的切片是 bytes, bytearray 的切片还是 bytearray。bytes 和 bytearray 的输出(__repl__).原创 2022-03-03 12:58:33 · 389 阅读 · 0 评论 -
JDBC 连接串中指定当前 schema(含 Oracle, DB2, PostgreSQL 和 SQLServer)
现在流行数据都有 Schema 的概念,一般作为数据库对象(表,函数,存储过程等)的命名空间。所以在数据库端往往存在 实例/数据库/Schema 这样层级划分。对于 DB2 和 Oracle 用客户端创建一个新的数据库并非易事,灵活的在数据库中较轻量的划分隔离空间的办法因数据库类型而异MySQL: 创建数据库(create database), create schema 是 create database的别名 PostgreSQL: create database 创建新的数据库,或在当前数据..原创 2022-03-03 12:55:08 · 7395 阅读 · 0 评论 -
流畅的 Python 读书笔记(二)
继续啃这本略微有些旧的书,《Fluent Python》第二版出版在即,预计今年四月份,它将会讲解到更新版本 Python 的特性,书中有提到 Python 3.10。第一版读下来也不会是浪费时间的。还是数据结构,现在来到字典,dict 是 Python 语言的基石,在它内部也被广泛应用,比如 type(globals()) 是个 dict, globals() 的内容有我们能调用的全局函数。如果在编程中不想创建新对象的话,dict 几乎能表述需要的数据结构。dict 就是一个 hash 表,它是.原创 2022-03-03 12:54:10 · 113 阅读 · 0 评论 -
配置 AWS Lambda Python Logging
通常在 Python 应用中简单的配置使用内置的 logging是这样的 1 2 3 4 5 6 import logging logging_format = '%(asctime)s - %(levelname)s - %(module)s(%(funcName)s:%(lineno)d) - %(message)s' logging.basicConfig(level=logging.INFO, for.原创 2022-01-26 13:09:37 · 622 阅读 · 0 评论 -
流畅的 Python 读书笔记(一)
用了一段时间的 Python, 觉得还是有必要读一下《流畅的Python》这本书,它虽然是基于 Python 3.4 的,但 Python 自身的很多特性希望了解的更多,更深,或巩固,或扫扫死角。对于少量属性的对象可以用 collections.namedtuple 快速构建一个类 Card = collections.namedtuple('Card', ['rank', 'suit']), 用 type(Card) 看到的就是一个 class, 第一个参数 Card 是类名,第二个参数列表里是属..原创 2022-01-26 13:08:40 · 889 阅读 · 0 评论 -
Celery(分布式任务队列)入门学习笔记
在步入到 AWS 后,设计一个典型的分布式计算任务模式是提交任务的客户端把一组组待计算任务的输入编制成消息发送到 SQS 或 SNS队列中 SQS 消息可被 ECS 或 Lambda 处理, SNS 消息还能触发 Lambda,ECS/Lambda 完成实际的计算任务 结果可以保存到 Redis, S3 或别处, 如果提交任务端想要获取计算结果,可用 ID来追踪用 ECS 的好处是可以基于 SQS 的消息数进行 AutoScaling 配置,决定 Worker 的规模; 用 Lambda 适...原创 2022-01-18 04:26:12 · 1983 阅读 · 1 评论 -
小心 Python 函数默认参数的陷阱
Python 的函数参数支持默认值,这是本人一直喜欢的特性,Python 不支持方法重载,但默认参数可起到类似的效果,还不用写多个函数。现在支持默认参数的语言普遍的,像 C++, C#, Ruby, Groovy, PHP, Scala, JavaScript 等,Java 还不行。但是特别要小心,Python 的函数默认值与其他的语言是不同的,直接违反了最直观的常识 -- 默认参数应该是省略就每次用同样的默认值,传的话就用传入的值。当我在 IntelliJ IDEA 中写类似如下的代码原创 2022-01-17 03:00:54 · 976 阅读 · 0 评论 -
Python 类实现的装饰器及简陋 REST API
学习了函数实现的 Python 装饰器后,关于装饰器的内容还没完。Python 装饰器还是属于元编程的范畴,一谈到元(Meta), 元编程,往往能用简单的方式实现比较神奇的效果 --小渣男的非死不可除外。Python 还允许用类来实现装饰器,原理上就是能让 Python 对象函数用,见之前的一篇Python 对象当函数使用及动态添加方法。关键就是类实现__call__函数,对象就变成callable, 与函数的装饰器实现归纳起来就是:一个 Python 类型能不能用 @ 当作装饰器来用只需看它是否...原创 2022-01-17 03:00:07 · 374 阅读 · 0 评论 -
Python 中带属性的装饰器
刚刚完成由 Python 的 Ellipsis 到 *, /, *args, **kwargs 函数参数, 又回想起在熟悉和应用 Python 的装饰器,关于带属性的装饰器一直未交代,安心不下来,Python 中带属性的装饰器用得非常普遍,如 Flask 的@app.route('/')。我们一看到 Python 的装饰器(Decorator) 会很直截的与 Java 的注解(Annotation) 联系起来,其实除了都用@符号外是存在很大区别的。正如它们被翻译成的中文名那样,Java 的注解...原创 2022-01-17 02:59:37 · 650 阅读 · 0 评论 -
由 Python 的 Ellipsis 到 *, /, *args, **kwargs 函数参数
早先对 Python *args, **kwargs 参数有所了解,也知道参数列表中的/表示 Positional Only,*很少见。然而在使用 FastAPI 时看到路由函数中表示默认值采用了...的方式又重新激发起我对 Python 函数参数的*,/,*args, 和**kwargs的兴趣。如 FastAPI 官方文档Request Forms and Files中的@app.post("/files/")async def create_file(file: b...原创 2022-01-02 07:12:36 · 341 阅读 · 0 评论 -
FastAPI - 一款新型的 Python Web 框架(对比 Flask)
近日曾想尽办法为 Flask 实现 Swagger UI 文档功能,找到的实现方式基本上是Flask+ Flasgger,记录在Flask 应用集成 Swagger UI。然而不断的 Google 过程中偶然发现了一款集成了 Swagger UI 的比 Flask 还好的 Python Web 框架 --FastAPI。起初想要在标题中表达的意思大概是 Flask + Swagger = FastAPI, 后来发现 FastAPI 的闪亮点不仅如此,于是乎又找了些 Flask 与 FastAPI...原创 2021-12-22 06:30:03 · 2301 阅读 · 0 评论 -
Python async, await 的理解与使用
关于 Python 中 async, await 关键字的一些知识在去年的一篇探索 Flask 对 asyncio 的支持有讲到,一直没在实际上用过它们,所以基本上也就忘干净了。随着Flask2 加入了 async 的特性,以及 FastAPI 从一开始支持 async, 又觉得有必要重新温习一下 Python 中如何使用 async, await 关键字了。注:由于 Flask 支持了 async, 号称 async 化 Flask 的Quart项目开始变得无足轻重了。本文主要的学习...原创 2021-12-22 06:29:19 · 536 阅读 · 0 评论 -
Flask 应用集成 Swagger UI
成熟的 Web API 框架总有一款 API 文档与之伴随,当前最知名的莫过于支持 Open API 的 Swagger 了。Python 的 Flask 框架支持 Swagger UI 也有几条路子Flasgger: 好像是 flask-swagger 的 fork flask-swagger: 许久未更新了,不用考虑 flask-restful-swagger: 到目前也两年未更新了 Flask-RESTPlus 的 Swagger 特性: 真需要用到 Flask-RESTPlus就可以...原创 2021-12-22 06:26:49 · 1883 阅读 · 0 评论 -
逐步理解 Flask 的 Blueprint(蓝本)
Python 的Flask框架能让我们快速的建立一个轻量级的 Web 或 REST API。对于小应用由一个 @app 装饰一撸到底就行,当项目稍具规模或要更清晰就要考虑模块化,于是来到了我们今天的话题,首先是为什么需要 Blueprint?比如说我们一定超级简单的 Flask 应用 main.py 的代码如下: 1 2 3 4 5 6 7 8 from flask import Flask ..原创 2021-12-22 06:26:17 · 825 阅读 · 0 评论 -
创建和发布自己的 Python 包到 PyPI 上
像 Java 可发布包到 Maven 仓库,NodeJS 发布包到 NPM 一样,我们也可以创建自己的 Python 包并发布到PyPI仓库中去。或者内部使用的包,只须发布到私有的 Nexus 服务器上。本文中的例子将创建一个 Python 包bounded-executor, 并发布到 PyPI 上。为什么创建这个包呢?原因是直接用 Python 的 ThreadPoolExecutor 或 ProcessPoolExecutor 来提交任务的话,任务的等待队列是没有边界的,这就会造成因提交任...原创 2021-10-29 02:34:22 · 242 阅读 · 0 评论 -
Python 中创建 PostgreSQL 数据库连接池
征战 Java 多年,习惯于使用数据库之前都必须创建一个连接池,即使是单线程的应用,只要有多个方法中需用到数据库连接,建立一两个连接的也会考虑先池化他们。连接池的好处多多,1) 如果反复创建连接相当耗时,2) 对于单个连接一路用到底的应用,有连接池时避免了数据库连接对象传来传去,3) 忘记关连接了,连接池幸许还能帮忙在一定时长后关掉,当然密集取连接的应用势将耗尽连接,3) 一个应用打开连接的数量是可控的接触到 Python 后,在使用 PostgreSQL 也自然而然的考虑创建连接池,使用时从池中取,用原创 2021-10-15 08:01:39 · 1319 阅读 · 0 评论 -
Python zipfile 只借助内存进行压缩与解压缩
Pythonzipfile模块压缩与解压缩通常是对物理磁盘文件进行操作,比如参照官方的例子,生成压缩文件的代码是with zipfile.ZipFile('spam.zip', 'w') as myzip: myzip.write('eggs.txt') myzip.write('beef.txt')这样就生成了一个包含两个文件的压缩包 spam.zip, 相当于命令zip spam.zip egges.txt beef.txt的效果。用unzip -l spam.z...原创 2021-10-14 12:32:38 · 554 阅读 · 0 评论 -
Python Poetry 项目中相对路径模块引用的问题
最近一直在折腾 Python 项目,通过对几个 Python 项目依赖管理与构建工具的对比,最后选择了Poetry。它管理依赖,构建与发布包还是简单的多,不需要处理 setup.py, setup.cfg 和 Makefile文件, 甚至都不需要了解 wheel 是什么就能往 PyPI 发布包了。可是,别看 Poetry 的官网一直守护着一副小清新的形像,其实照样处处是坑,其中一个就是与相对引用有关的问题。我们来看下什么样的现像,最后的结论就是:在 Python 中避免使用相对路径引用,因为相对路径..原创 2021-10-14 12:31:53 · 366 阅读 · 0 评论 -
Python 依赖管理与构建工具(CookieCutter, PyScaffold, PyBuilder, Poetry)
Python 历时这么久以来至今还未有一个事实上标准的项目管理及构建工具,以至于造成 Python 项目的结构与构建方式五花八门。这或许是体现了 Python 的自由意志。不像 Java 在经历了最初的手工构建,到半自动化的 Ant, 再到 Maven 基本就是事实上的标准了。其间 Maven 还接受了其他的 Gradle(Android 项目主推), SBT(主要是 Scala 项目), Ant+Ivy, Buildr 等的挑战,但都很难撼动 Maven 的江湖地位,而且其他的差不多遵循了 Maven 的原创 2021-10-14 12:30:23 · 609 阅读 · 0 评论 -
用 Python 定义 Schema 并生成 Parquet 文件
原来用 Java 和 Python 实现过 Avro 转换成 Parquet 格式,所以 Schema 都是在 Avro 中定义的。这里要尝试的是如何定义 Parquet 的 Schema, 然后据此填充数据并生成 Parquet 文件。本文将演示两个例子,一个是没有层级的两个字段,另一个是含于嵌套级别的字段,将要使用到的 Python 模块有 pandas 和 pyarrow简单字段定义定义 Schema 并生成 Parquet文件阅读全文 >>...原创 2021-10-14 12:26:32 · 709 阅读 · 0 评论 -
Python 子进程与子进程池的应用
去年记录过一篇如何使用 Python 的线程,线程池的日志Python 多线程编程, 需用到 threading.Thread, concurrent.futures.ThreadPoolExecutor。本文可以当作是上一文 Python 多线程编程的姊妹篇。Python 的多线程受到 GIL(Global Interpreter Lock) 的限制,GIL 是一把加到了 Python 的解释器的锁,使得在任意时刻只允许一个 Python 进程使用 Python 解释器,也就是任意时刻,Pytho..原创 2021-09-03 10:36:13 · 154 阅读 · 0 评论 -
Python 调用动态库时 Segmentation fault (core dumped) 问题
这几天一直纠缠在如何调用动态库的问题上,先是 Go 语言,而后迁移到 Python 语言。在测试 Python 调用动态库时,出现过 "Segmentation fault (core dumped)" 的问题,本文记录下怎么去寻找线索,找到并解决问题的。出现 "Segmentation fault (core dumped)" 的原因是多方面的,比如在 C/C++语言中内存访问越界(数组越界,strcpy, strcat, sprintf, strcmp 等字符串函数读写越界) 多线程使用了线.原创 2021-09-03 10:35:43 · 1858 阅读 · 0 评论