news 2026/2/10 14:37:38

python一些小细节

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python一些小细节

GIL锁:

当python使用多线程的时候, 每个线程通过请求这个锁获取运行权。 结束时归还


async/await/asyncio/gather/create_task/ThreadPool

理解asynciohttps://www.bilibili.com/video/BV1oa411b7c9?spm_id_from=333.788.videopod.sections&vd_source=8ca92588511fc633026e558331f021cb

装饰的function,

coroutine object

真正的并行和协程: 2s执行结束

async def main(): task1 = asyncio.create_task(say_after(1, "hello")) task2 = asyncio.create_task(say_after(2, "world")) print("start at", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) await task1 await task2 print("end at", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
串行, 3s执行结束
async def main(): print("start at", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) await say_after(1, "hello") await say_after(2, "world") print("end at", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))

如果使用gather方式, 不需要单独create task再放进去(伪协程)

async def main(): print("start at", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) res = asyncio.gather( say_after(1, "hello"), say_after_2(2, "world") ) print(res) print("end at", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))

threadpool

with ThreadPoolExecutor(max_workers=2) as executor: # 存储Future对象与自定义数据的映射 future_to_params = {} for task_id in range(1, 4): delay = task_id # 任务1延迟1秒,任务2延迟2秒,任务3延迟3秒 future = executor.submit(task, delay) future_to_params[future] = (task_id, delay) # 关联任务ID和延迟 # 按完成顺序处理 for future in as_completed(future_to_params): task_id, delay = future_to_params[future] try: result = future.result() print(f"任务ID:{task_id},{result}") except Exception as e: print(f"任务ID:{task_id},执行失败:{e}")

VizTracer:

Viztracer开发者讲解https://www.bilibili.com/video/BV1d34y1C78W?spm_id_from=333.788.player.switch&vd_source=8ca92588511fc633026e558331f021cb&p=2

基础用法:

装pip包

全局方式使用: python 1.py -> viztracer 1.py

内部函数方式使用:

with VizTracer(): func()

Perfetto(google 开源的trace)

Jupyter中使用:

# 初始load %load_ext viztracer # 使用时 %%viztracer
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/8 2:40:12

JSP如何支持信创环境的大文件断点续传?

大文件传输系统解决方案 作为浙江IT行业软件公司项目负责人,我们面临的大文件传输需求具有很高的技术挑战性。以下是我针对该需求的专业解决方案分析。 需求分析总结 超大文件传输:单文件100GB,文件夹层级结构保持高稳定性:支持…

作者头像 李华
网站建设 2026/2/7 0:25:08

GitHub上最火的Qwen3-32B衍生项目TOP10盘点

GitHub上最火的Qwen3-32B衍生项目TOP10盘点 在生成式AI浪潮席卷全球的今天,大模型不再是科技巨头的专属玩具。越来越多的企业和开发者开始寻找既能扛起复杂任务、又不至于压垮服务器预算的“黄金平衡点”模型。就在这个关键节点上,阿里通义实验室推出的…

作者头像 李华
网站建设 2026/2/10 12:08:47

RAG 2.0 深入解读

本文从RAG 2.0 面临的主要挑战和部分关键技术来展开叙事,还包括了RAG的技术升级和关键技术等。 一、Introduction 过去一年可谓是RAG元年,检索增强生成技术迅速发展与深刻变革,其创新与应用已深刻重塑了大模型落地的技术范式。站在2025年&…

作者头像 李华
网站建设 2026/2/9 21:03:44

22、Docker Swarm 模式:从基础到实践

Docker Swarm 模式:从基础到实践 1. 基础部署与应用上线 在容器部署中,我们可以借助相关工具实现应用的快速上线。例如,Centurion 可以完成拉取所需镜像、验证镜像拉取是否正确,接着连接到主机停止旧容器、创建新容器并启动,还会持续进行健康检查,直到容器报告健康状态…

作者头像 李华
网站建设 2026/2/9 15:12:52

24、容器编排:从 ECS 到 Kubernetes 的实践指南

容器编排:从 ECS 到 Kubernetes 的实践指南 1. ECS 任务清理与进阶准备 在使用 AWS ECS(Elastic Container Service)时,当你使用相同的任务 ID 再次描述任务,你会发现 lastStatus 键被设置为 STOPPED 。例如: $ aws ecs describe-tasks --cluster fargate-testin…

作者头像 李华