news 2026/8/21 4:03:35

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/8/21 4:32:04

程序员搞钱新赛道:大模型开发全栈教程,小白也能30天速成!

Part.1 AI工程师都要会些什么? 大语言模型(Large Language Model,LLM)技术的兴起,正在深刻影响软件的形态,开发者的工作也从实现业务逻辑、构建独立应用,转向以LLM为底层引擎快速搭建智能应用的…

作者头像 李华
网站建设 2026/8/21 8:45:19

ensp下载官网类比:寻找Qwen3-14B官方模型分发渠道

Qwen3-14B 模型镜像:从“eNSP下载官网”看企业级AI部署的可信源头 在企业IT建设中,工程师对设备镜像的来源有着近乎严苛的要求——没人会从第三方论坛下载华为eNSP的模拟器镜像来搭建生产环境教学平台,因为那可能埋藏后门、存在兼容性问题&am…

作者头像 李华
网站建设 2026/8/20 21:17:38

代码开发,常用的几种设计模式【golang】

一、创建型模式(处理对象创建) 1. 单例模式(Singleton) 用途:保证一个结构体在程序运行期间只有一个实例(确保全局只有一个实例被new出来),并提供全局访问点(如配置管理器、日志器) …

作者头像 李华
网站建设 2026/8/22 0:38:38

计算机毕业设计springboot金象传动公司工资管理信息系统开发 基于Spring Boot框架的金象传动公司薪酬管理系统开发 金象传动公司工资管理信息化平台设计与实现

计算机毕业设计springboot金象传动公司工资管理信息系统开发k5gpm9(配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着信息技术的飞速发展,企业对工资管理的信息化需…

作者头像 李华
网站建设 2026/8/21 12:39:02

毕设 基于大数据挖掘分析的大众点评评论文本挖掘

文章目录1.前言2.爬虫1.1 整体思路1.2 网页爬取和解析1.3 数据存储反爬虫对抗2 探索性分析与文本数据预处理2.1 探索性分析2.2 数据预处理2.3词云展示3 文本的情感分析3.1 先上结果3.2 文本特征提取(TF-IDF)3.3 机器学习建模3.4 最后输出的准确率1.前言 …

作者头像 李华
网站建设 2026/8/21 2:10:57

27、Docker 容器安全深度解析

Docker 容器安全深度解析 1. 命名空间与容器隔离 命名空间是让容器看起来像容器的关键因素。通过 nsenter 命令,我们可以精确指定要进入的命名空间,甚至可以只进入临时容器命名空间的一部分来进行探索。结合 cgroups,命名空间能在同一内核上为进程提供较为强大的隔离。 …

作者头像 李华