Python面试题159-168并发

本文涵盖了Python面试中关于并发的常见问题,包括concurrent.futures线程池的使用、多线程与协程的区别、GIL的概念、进程间通信、IO多路复用的作用以及select、poll、epoll的区别。同时讨论了并发与并行的定义、线程间调用函数的方法、异步非阻塞编程的理解以及threading.local的作用。
摘要由CSDN通过智能技术生成

参考自:https://cloud.tencent.com/developer/article/1490616(题目来源)

所有题目

并发

159.举例说明 conccurent.future 的中线程池的用法

concurrent.futures模块为我们提供了ThreadPoolExecutor与ProcessPoolExecutor来使用线程进程池

from concurrent.futures import ThreadPoolExecutor
import requests,time
url_list = ['https://www.cnblogs.com/', 'https://www.csdn.net/', 'https://github.com/']
def get_url(url):
    content = requests.get(url).content.decode()
    print(url+'已获取')

pool = ThreadPoolExecutor(max_workers=3)
future_list = []
start = time.time()
for url in url_list:
    future = pool.submit(get_url,url)
    print(future.done())
    future_list.append(future)
end = time.time()

print(end-start)
time.sleep(5)
for future in future_list:
    print(future.done())

160.说一说多线程,多进程和协程的区别。

多进程 多线程
数据共享、同步 数据共享复杂,需要用IPC;数据是分开的,同步简单 因为共享进程数据,数据共享简单,同步复杂 各有优势
内存、CPU 占用内存多,切换复杂,CPU利用率低 占用内存少,切换简单,CPU利用率高 线程占优
创建销毁、切换 创建销毁、切换复杂、速度慢 创建销毁、切换简单,速度很快 线程占优
编程、调试 编程简单,调试简单 编程复杂,调试复杂 进程占优
可靠性 进程间不会互相影响 一个线程挂掉将导致整个进程挂掉 进程占优
分布式 适用于多核、多机分布式;如果一台机器不够,扩展到多台机器比较简单 是英语多核分布式 进程占优

协程优势:

执行效率极高,因为子程序切换(函数)不是线程切换,由程序自身控制,没有切换线程的开销。所以与多线程相比,线程的数量越多,协程性能的优势越明显。

不需要多线程的锁机制,因为只有一个线程,也不存在同时写变量冲突,在控制共享资源时也不需要加锁,因此执行效率高很多。

161.简述 GIL

GIL:全局解释器锁。每个线程在执行的过程都需要先获取GIL,保证同一时刻只有一个线程可以执行代码。

线程释放GIL锁的情况:在IO操作等可能会引起阻塞的systemcall之前,可以暂时释放GIL
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值