python 中的并发与并行(一)

本文探讨了Python中的并发和并行概念,通过多进程和多线程的例子展示了它们如何影响程序性能。通过示例代码,展示了如何使用`concurrent.futures.ThreadPoolExecutor`实现多线程下载,从而提高效率。同时,提到了线程安全问题以及解决方案,如`threading.local()`用于线程隔离。
摘要由CSDN通过智能技术生成

python中的并发是同时发生的事情由线程,任务,进程调用(实际上还是按顺序运行的一系列指令)。宏观上看,线程,任务和进程是相同的,细节上她们代表不同的东西。事实上只有多进程在同一时间运行着多个任务,线程和异步都在单个处理器运行,即一次只能处理一个任务。

先占式多工法:操作系统知道每个线程,并且可以随时中断该线程后运行别的线程,即对线程进行切换。线程的切换可以发生在单个python语句里,在任何时候都可能需要进行任务切换。

多核CPU的并行,通过多进程,python创建新的进程(一半来说电脑几核就开几个进程)。每一个进程可以被看做是一个完全不同的程序,每一个进程都在自己的python解释器中运行。

并发在CPU绑定和IO绑定问题上有很大影响,因为需要等待外部资源的输入输出或者程序处理的是比CPU慢得多的东西(通常是文件系统和网络连接)。在程序里添加并发性会增加额外的代码和复杂性,需在确定加速之前评估是否值得这样做。如不好的架构会导致并发或并行无法发挥加速作用,而推倒重来很多时候不允许。

多线程添加实例,以网络访问为例子

未添加多线程的程序:

import requests
import time

def download_site(url,session):
    with session.get(url) as response:
        print(f"read {len(response.content)} from {url}")

def download_all_sites(sites):
    with requests.Session() as session:
        for ur

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值