
Python
文章平均质量分 62
Michael阿明
两个孩子的父亲,8年机械工程师,已转行互联网做算法,一起继续加油!高举智慧,她就使你高升;怀抱智慧,她就使你尊荣。-- 箴言(4:8)
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
为爱编程:用 Python 自动化 PDF 签名,顺便秀一波技术
就这样,一个小小的 PDF 签名需求,通过 Python 脚本轻松搞定。这不仅仅是一个技术活儿,更是对女朋友的一份细心和体贴。当她看到这个自动化工具和压缩后的轻量级文件时,脸上露出了满意的笑容。那一刻,我觉得所有的代码都是值得的。所以,下次女朋友再遇到什么小麻烦,不妨试试用代码来解决吧,既能展现你的技术魅力,又能让她感受到你的用心和爱意!❤️。原创 2025-07-27 19:44:10 · 891 阅读 · 0 评论 -
将markdown文件转成PDF(支持代码块、公式)
【代码】将markdown文件转成PDF(支持代码块、公式)原创 2025-07-18 22:13:52 · 375 阅读 · 0 评论 -
ZeroMQ (0MQ) 入门 - 几种经典的模式
ZeroMQ (也写作 ØMQ, 0MQ 或 ZMQ) 是一个高性能的异步消息传递库,旨在用于分布式或并发应用程序。它提供了一个消息队列,无需一个专门的消息代理服务器。原创 2025-06-11 06:58:59 · 1274 阅读 · 0 评论 -
探索HTTP流式返回:Python实战与Ollama本地模型测试
Ollama 将模型权重、配置和数据打包成一个单一的包(通过Modelfile管理)。它简化了模型的下载、部署和管理过程。原创 2025-05-17 00:05:29 · 1039 阅读 · 1 评论 -
多进程性能优化:共享内存 vs 普通多进程
普通多进程:每个子进程独立处理一份数据副本。共享内存:所有子进程共享同一块内存区域,避免数据的多次拷贝。我们通过一个简单的实验来对比这两种方式的性能和内存使用情况。通过对比共享内存和普通多进程的实现方式,我们发现共享内存版本在内存使用和性能上具有显著优势。对于需要处理大规模数据或多进程协作的场景,推荐使用共享内存来优化性能和内存使用。原创 2025-04-16 23:16:15 · 1034 阅读 · 0 评论 -
Python调用C/C++代码
Python调用C/C++代码是一种常见的性能优化手段,适用于需要高性能计算的场景。ctypes适合简单的函数调用,而pybind11则更适合复杂的C++代码集成。尽管调用C/C++代码可以显著提升性能,但也带来了额外的复杂性和开发成本,因此在决定使用时应权衡利弊。原创 2025-02-10 22:58:41 · 1577 阅读 · 0 评论 -
使用 copilot 写一个 websockets聊天室
上个月我毕业了,今天闲下来,写个小玩具:跟 copilot 进行了多轮对话,不断的修改需求,给出代码服务端 python代码chat HTML, 改成你的 局域网/或者公网 IP演示视频https://www.bilibili.com/video/BV1CWDGYkEZX/原创 2024-10-25 00:00:14 · 205 阅读 · 0 评论 -
Python3.13 rc2 自由线程性能实验
如果你曾经尝试通过多线程提升Python的性能,那么你肯定遇到过一个老对手——(GIL)。这个讨人厌的小家伙会阻止Python线程真正实现并行运行。但是嘿!GIL已经是个老生常谈的话题了,如今,随着Python 3.13推出了实验性的NO-GIL(自由线程)版本,终于有机会动手试试看这到底意味着什么!正式版本预计在假期推出,现在目前是 RC2 版本。原创 2024-09-28 09:28:49 · 1842 阅读 · 0 评论 -
Python signal 信号处理模块
模块允许你注册信号处理函数,这样当接收到特定信号时,可以执行自定义的代码。这对于在程序退出前执行清理操作非常有用,比如保存状态、关闭文件、释放资源等。信号是软件中断,通常由操作系统发送给进程,以通知进程发生了某个事件。下面是一个简单的例子,展示了如何在Python程序中捕获。来注册这个处理函数。命令用于向进程发送信号,默认情况下发送的是。信号(15),这会导致进程终止。是程序的进程ID),程序会执行。在这个例子中,我们定义了一个。信号,比如通过在终端中执行。函数中的代码,然后退出。,默认是 15 信号。原创 2024-05-08 20:36:37 · 725 阅读 · 1 评论 -
pyinstaller打包exe应用程序【乘法计算过程演示】
代码内所有的资源路径需要调用以下函数获取,防止打包的时候找不到。新建一个干净的环境,只安装项目必须的包,减少打包的大小。使用python的turtle包进行乘法动画演示。这是第一个打包制作的电脑小程序,记录一下。几百行代码,打包后是30M,还是比较大。upx:压缩安装包的大小。激活虚拟环境,执行打包。原创 2023-08-06 19:15:49 · 374 阅读 · 0 评论 -
python内存泄漏问题的一种处理方法
可以看出内存占用在逐渐变大,新建了一个对象后,没有释放。可以看出内存的使用恒定在某个数值,不再增大了。原创 2023-06-27 09:34:14 · 2467 阅读 · 0 评论 -
python多进程通信、共享变量
进程是计算机中正在运行的程序的实例。多进程指的是同时运行多个进程。原创 2023-03-09 13:33:59 · 1855 阅读 · 0 评论 -
python 按行数分割文件
行,分割成多个小文件,以下实现内存占用低。将一个大文件按照每个文件最多。test 文件有 5 行。原创 2023-01-14 20:57:57 · 1939 阅读 · 0 评论 -
Python 多进程处理数据
多进程也会相应消耗更多倍的资源,可以根据资源情况,设置进程数量来限制。就会等待子进程结束才会继续执行。,主进程直接会执行后续代码。原创 2022-10-16 16:22:40 · 1561 阅读 · 0 评论 -
python 并发、并行处理、分布式处理
async def hello() : await asyncio . sleep(1) # 等待1 s print("hello michael") coro = hello() print(coro) # loop = asyncio . get_event_loop() loop . run_until_complete(coro) # hello michaelawait。原创 2022-08-30 09:29:40 · 912 阅读 · 0 评论 -
纯粹的python优化(数据结构、cache、推导、生成器)
对生成器对象进行迭代时,每次只返回一个计算结果,可以节省内存使用。如果是元组等,将按第一个元素排序,一样的话,按第二个,以此类推。PriorityQueue 优先队列,它是线程、进程安全的。两者可以替代显式的 for 循环,效率比 for 循环要高。插入和删除元素的时间复杂度都是 O(log n)字典树可以快速查找前缀字符串,课用于文字补全。在N篇文档中查找包含 X 单词的所有文档。,以后每次查询的时间复杂度是 O(1)当N非常大的时候这样的效率是很低的。标准库没有实现,有第三方包实现。...原创 2022-08-15 20:31:34 · 836 阅读 · 0 评论 -
python 基准测试(cProfile \ kcachegrind \ line_profiler \ memory_profiler)
该包可以了解代码是如何转换为字节码的, dis 表示 disassemble 反汇编。注意:细微的优化,速度有所提高,但可能并不显著,还需要保证算法正确。上面显示,测了58次,用时的最小、最大、均值、方差、中位数等。它是一个 py 包,安装后,对要监视的函数应用 装饰器。profile 对象开启和关闭之间可以包含任意代码。可以是用该工具了解指令的多少和代码是如何转换的。生成100个实例,模拟 0.1 秒。也需要对监视的函数 加装饰器。,看前几个就是耗时最多的几个。内存使用随时间的变化。......原创 2022-08-10 09:30:39 · 1094 阅读 · 0 评论 -
pydev debugger: warning: trying to add breakpoint to file that does not exist: /tmp/xxx
pycharm在本地,连接远程进行debug,发现报错。,也填写了路径映射,都不行。原创 2022-08-02 11:52:27 · 1831 阅读 · 0 评论 -
export/set 环境变量读取对应配置
我们有时候不希望将配置参数写在代码里,而作为单独的文件传入一种办法是设置环境变量参数,根据这个参数来决定读取哪个配置文件原创 2022-07-06 18:28:05 · 302 阅读 · 0 评论 -
pypinyin 获取多音字的拼音组合
使用 pypinyin 包import pypinyinfrom pypinyin import pinyin, lazy_pinyinimport itertoolstext = '追剧、听音乐'# heteronym 开启多音字选项, NORMAL不带声调ans = list(itertools.product(*pinyin(text, heteronym=True, style=pypinyin.NORMAL)))print(ans)输出:[('zhui', 'ju', '.原创 2022-03-16 11:19:38 · 1883 阅读 · 1 评论 -
python 输出 GPU内存 最大使用率
安装 pip install nvidia-ml-pyfrom pynvml import *def nvidia_info(): # pip install nvidia-ml-py nvidia_dict = { "state": True, "nvidia_version": "", "nvidia_count": 0, "gpus": [] } try: nvmlInit() .原创 2022-02-07 12:05:51 · 4179 阅读 · 0 评论 -
pip/conda导出 requirements.txt 注意事项
pip使用 pip freeze > ./requirements.txt导出 requirements.txt 发现很多包没有版本号,而是 @ file:///使用pip list --format=freeze > ./requirements.txt导入安装 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txtconda导出 conda list -e > requirem原创 2022-01-18 11:43:02 · 1172 阅读 · 1 评论 -
pycharm profile对函数调用效率进行测试
假设有如下代码:def func1(): for i in range(1000): print("i love python")def func2(): for i in range(10): print("i love c++") func3()def func3(): for i in range(100): print("i love java")def main(): func1()原创 2022-01-14 08:34:43 · 605 阅读 · 0 评论 -
安装 paddleocr 报错 gcc: error trying to exec ‘cc1‘: execvp: 没有那个文件或目录
安装 paddleocrpip install paddleocr -i https://pypi.tuna.tsinghua.edu.cn/simple报错creating build/temp.linux-x86_64-3.8creating build/temp.linux-x86_64-3.8/Levenshteingcc -pthread -B /opt/bdp/data01/anaconda3/envs/pp21/compiler_compat -Wl,--sysroot=/ -Ws原创 2021-12-24 11:02:29 · 1542 阅读 · 0 评论 -
尽量使用写文本方式存储数据(pandas 和 file write效率对比)
对比:使用 pandas 存储数据 VS 使用写文本 方式存储数据import pandas as pdimport timedef pandasWrite(): t0 = time.time() colname = [str(i) for i in range(550)] df = pd.DataFrame(columns=colname) for i in range(100): df.loc[len(df)] = dict(zip(colnam.原创 2021-12-17 16:11:03 · 974 阅读 · 0 评论 -
python 操作MySQL数据库
文章目录1. 安装 PyMySQL2. 连接对象3. 游标对象4. 增删改操作cursor.execute(sql)cursor.executemany(sql, seq_of_params)5. 查询操作6. ORM编程常用 python ORM 库learning from 《python web开发从入门到精通》1. 安装 PyMySQLconda 虚拟环境下安装 pip install pymysql2. 连接对象创建连接的一个 objectimport pymysqltry:原创 2021-12-01 20:53:43 · 1551 阅读 · 1 评论 -
python 获取英文人名翻译
# 获取中英文人名翻译import timeimport urllib.requestdef getename(ename_data='ename2cname.txt'): flag = "jerry.asp?id=" # 特定标记位置 url = 'https://name.supfree.net/tom.asp?id=' alphas = [chr(x) for x in range(ord('a'), ord('z') + 1)] with open(en.原创 2021-09-24 13:49:33 · 12042 阅读 · 1 评论 -
python 代码文件路径注意事项
检查代码的工作路径,是不是代码文件所在路径导入别处的包基于该代码的工作路径写如下的代码,加入相对路径,可以找到要导入的文件import sysimport ossys.path.append("../xxx/")sys.path.append("../../xxx")from tools_v1 import xxxx查bug,检查文件真实路径print(os.path.realpath("origin_dev_modify.txt")) # 打印真实的读取路径终极武器,最.原创 2021-09-15 19:48:38 · 346 阅读 · 0 评论 -
python 属性描述符
文章目录1. 描述符示例:验证属性learn from 《流畅的python》1. 描述符示例:验证属性描述符是对多个属性 运用 相同存取逻辑的一种方式描述符是实现了 特定协议 的类,这个协议包括 __get__、__set__ 和 __delete__ 方法property 类实现了完整的描述符协议实现了 __get__、__set__ 或 __delete__ 方法的类是描述符。描述符 的用法是,创建一个实例,作为另一个类的类属性class Quantity: def __i原创 2021-09-10 16:40:34 · 474 阅读 · 0 评论 -
python 动态属性和特性
文章目录1. 使用动态属性转换数据learn from 《流畅的python》1. 使用动态属性转换数据在 Python 中,数据的属性和处理数据的方法统称属性(attribute)。其实,方法只是可调用的属性我们还可以创建特性 (property)from urllib.request import urlopenimport warningsimport osimport jsonURL = 'http://www.oreilly.com/pub/sc/osconfeed'JS原创 2021-09-09 09:53:32 · 674 阅读 · 0 评论 -
python 使用 asyncio 包处理并发
文章目录1. 线程与协程对比learn from 《流畅的python》1. 线程与协程对比threadingimport threadingimport itertoolsimport timeimport sysclass Signal: go = Truedef spin(msg, signal): write, flush = sys.stdout.write, sys.stdout.flush for char in itertools.cycle原创 2021-09-03 09:38:44 · 624 阅读 · 0 评论 -
python 使用期物处理并发
文章目录1. futures.ThreadPoolExecutor2. 期物3. 阻塞型I/O和GIL4. 使用concurrent.futures模块启动进程learning from 《流畅的python》1. futures.ThreadPoolExecutorimport osimport timeimport sysimport requestsPOP20_CC = ('CN IN US ID BR PK NG BD RU JP ' 'MX PH VN ET EG DE IR TR原创 2021-08-31 09:54:58 · 215 阅读 · 0 评论 -
python 协程
文章目录1. 协程工作流程和状态2. 预激协程的装饰器3. 终止协程、异常处理learn from 《流畅的python》1. 协程工作流程和状态def simple_coroutine(): # 协程使用生成器函数定义,有yield关键字 print("-> coroutine started") x = yield # yield 右边没有表达式,所以只需从客户那里接收数据 print("-> coroutine received: ", x)my_coro原创 2021-08-27 09:17:24 · 292 阅读 · 0 评论 -
python 上下文管理器、 else 块、@contextmanager
文章目录1. else2. with上下文管理器3. contextlib模块实用工具4. @contextmanager 装饰器learn from 《流畅的python》1. elsefor/else、while/else 和 try/else前两者 只有在 没有被break 时,才会运行 elsetry 块中没有异常抛出时 才运行 elsefor i in range(3): print(i)else: print("finish, no break") #原创 2021-08-26 09:26:35 · 236 阅读 · 0 评论 -
python 迭代器、生成器、yield、iter
文章目录1. 迭代器2. 生成器3. 标准库3.1 过滤3.2 映射3.3 合并3.4 排列组合3.5 重新排列4. yield from5. 可迭代的归约函数6. iter 还可以传入2个参数7. 生成器当成协程learn from 《流畅的python》1. 迭代器所有生成器都是迭代器,因为生成器完全实现了迭代器接口序列可以迭代的原因:iter函数,解释器需要迭代对象 x 时,会自动调用 iter(x)内置的 iter:先检查是否实现了 __iter__,不然,检查是否实现 __getite原创 2021-08-25 09:28:34 · 861 阅读 · 5 评论 -
python 接口 、继承、重载运算符
文章目录1. 序列`__getitem__`2. `__setitem__`3. 抽象基类learn from 《流畅的python》1. 序列__getitem__如果没有 __iter__ 和 __contains__ 方法,Python 会调用 __getitem__ 方法,设法让 迭代 和 in 运算符可用class Foo: def __getitem__(self, pos): return range(0, 30, 10)[pos]f = Foo(原创 2021-08-17 09:12:27 · 369 阅读 · 0 评论 -
python 清除字符串中的 emoji 表情
https://pypi.org/project/emoji/pip install emoji字符串中间有 emoji 表情,替换掉。text = "????贝贝有点甜????"res = emoji.demojize(text) # ':rabbit_face:贝贝有点甜:rabbit_face:'# 正则表达式替换为 r"想换的字符串"res = re.sub(emoji.get_emoji_regexp(), r" ", text) # ' 贝贝有点甜 '...原创 2021-08-13 11:38:09 · 3165 阅读 · 0 评论 -
python 自定义类(特殊方法)
文章目录1. 对象表示形式learn from 《流畅的python》from array import arrayimport mathclass Vector2D: typecode = 'd' # 类属性 def __init__(self, x, y): self.x = float(x) self.y = float(y) @classmethod # 装饰器, 函数不需要传入 self 参数,需要cls 传入类本身原创 2021-07-24 17:38:26 · 1875 阅读 · 0 评论 -
python 对象引用、可变性 和 垃圾回收
文章目录1. 变量是标签2. 元组的相对不可变性3. 默认浅复制4. 函数的参数作为引用时learn from 《流畅的python》1. 变量是标签>>> a = [1, 2, 3] >>> b = a >>> a.append(4) >>> b [1, 2, 3, 4]对象的 id 在生命周期中是不变的is 运算检查两者的 id 是否一致== 检查两者内容(值)是否一样is 运算符比 == 速度快,因为原创 2021-07-22 08:27:00 · 231 阅读 · 3 评论 -
python 装饰器
文章目录1. 装饰器在导入的时候就会执行2. functools.wraps 装饰器,保持 被装饰的函数的 `__name__` 的值不变3. functools.lru_cache 实现备忘录4. functools.singledispatch 处理多个不同的输入类型5. 堆叠装饰器6. 参数化装饰器learn from 《流畅的python》def deco(func): def inner(): print("running inner()") return i原创 2021-07-20 09:25:05 · 239 阅读 · 0 评论