Python | Python 多线程、多进程与生成器

举报
xianyuplus 发表于 2021/06/24 09:08:33 2021/06/24
【摘要】 单线程运行ps -ef | grep pythonps -T -p [pid] # 查看 pid 中线程的 id# 进程主线程的 ID 等于 进程 IDpython 线程初体验threading.get_native_id() # 获取线程 idthreading.active_count() # 获取线程总数什么是线程池1、线程池是存放多个线程的容器2、CPU 调度线程执行后不会销毁线程3...

单线程运行

ps -ef | grep python
ps -T -p [pid] # 查看 pid 中线程的 id
# 进程主线程的 ID 等于 进程 ID

python 线程初体验

threading.get_native_id() # 获取线程 id
threading.active_count() # 获取线程总数

什么是线程池

1、线程池是存放多个线程的容器

2、CPU 调度线程执行后不会销毁线程

3、将线程放回线程池重复利用

为啥使用线程池

1、线程是稀缺资源,不应该频繁创建和销毁

2、架构解耦,线程创建和业务处理解耦,更加优雅

3、线程池是使用线程的最佳实践

Python 多线程的局限性

1、统计逻辑有错

2、CPU 核数

3、线程数过多,相互竞争消耗

多线程对于下载有明显的加速作用、对于 hash 只有副作用、对于存储有明显的加速作用

Python GIL

1、GIL 保证了 Python 解释器的正确运行

2、GIL 简单粗暴的设计保证了 Python 语言的茁壮成长

Python 多线程切换的过程

1、多线程运行需要竞争申请 GIL

2、Python 虚拟机强制释放 GIL

3、I/O 过程会自动释放 GIL

Python 进程池

什么是进程池

1、进程池是存放多个进程的容器

2、CPU 调度进程执行后不会销毁进程

3、将进程放回进程池重复利用

多进程的局限性

1、使用多进程需要考虑多进程切换的成本

2、多进程上下文切换的成本远大于多线程上下文切换的成本

生成器

1、迭代:重复执行一系列运算步骤,直到满足一定条件

2、迭代器:在可迭代对象上进行数据遍历访问的接口

3、可迭代对象:可以通过迭代器迭代出对象内数据的对象

list、map、set - 可迭代对象
for item in list:
    print(item)
    
- 上面这个 for 操作是 迭代

什么是生成器

[num for num in range(10)] # 列表
(num for num in range(10)) # 生成器
# 对于列表,每次迭代的时候这个迭代器都是指向初始的位置
# 对于生成器,迭代一次之后这个迭代器都是指向最后的位置

生成器是一次生成一个值的特殊类型函数,可以将其视为可恢复函数,调用该函数将返回一个可生成连续 x 值的生成器

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。