习得:Python多线程与并发

来源:哔哩哔哩

2023-06-18 04:18:13

大家好,我们来聊聊Python中的多线程与并发。最近在写一个项目,首先我们有一个Python实现的微服务。在这个微服务中,我们需要多次访问同一个服务器,且使用同一个API接口,最后在程序中汇总得到的response。那么我们这里可以考虑使用并发的方式来建立Pipeline,以提高程序运行的效率。

那么我们该如何处理这样的问题呢?我给出了5中方法。


(资料图片)

Python多线程与并发

在Python中并发处理任务或者请求的方式有多种,以下列举一些技术和框架:

线程(Threading):Python的threading库允许你创建多个线程来执行任务。然而,由于Python的全局解释器锁(Global Interpreter Lock,GIL),在CPU密集型任务中多线程可能并不会提供预期的并行性能提升。但是,在IO密集型任务(如网络请求)中,多线程可以有效地提高性能,因为它们可以在一个线程等待响应时,让另一个线程开始发送请求。

进程(Multiprocessing):Python的multiprocessing库提供了一种绕过GIL限制的方法,可以创建多个进程来并行执行任务。每个Python进程都有自己的Python解释器和内存空间,所以它们可以在多核CPU上并行运行。但是,进程间的通信(IPC)可能比线程间的通信更复杂和开销更大。

异步IO(AsyncIO):Python 3.5及更高版本支持原生的协程和async/await语法,用于编写异步代码。AsyncIO是Python的一个库,用于编写单线程并发代码,利用协程,使得在等待外部IO操作(如网络请求)时,可以切换执行其他任务。它对于实现高并发的网络请求非常有用。

并发框架:例如Gevent,它是一个基于协程的Python网络库,使用greenlet提供了高级别的同步样式编程接口。Tornado也是一个Python网络框架和异步网络库,用于处理成千上万的开放连接,使其适用于长轮询、WebSockets等应用场景。

任务队列(如Celery):Celery是一个强大的分布式任务队列,它可以让你定义一组任务,然后在多个工作节点上并行执行这些任务。任务可以是任何Python函数,Celery将这些函数的调用请求发送给可用的工作节点,然后在节点上执行任务。

下面是这5个技术的优缺点的简单分析:

线程(Threading)

优点:

缺点:

因为Python的全局解释器锁(GIL),在CPU密集型任务上可能不会有显著的性能提升。

线程间的共享状态可能导致复杂的同步问题。

线程是轻量级的,比进程启动和运行成本小。

在线程之间共享数据和状态较为容易。

对于I/O密集型任务,如文件操作和网络操作,使用多线程可以显著提高性能。

进程(Multiprocessing)

优点:

进程是重量级的,比线程启动和运行成本大。

进程间通信(IPC)复杂且开销大。

缺点:

进程可以绕过GIL的限制,能够利用多核CPU并行执行任务,适合CPU密集型任务。

进程之间的状态是独立的,可以避免线程间的复杂同步问题。

异步IO(AsyncIO)

优点:

AsyncIO并不适用于CPU密集型任务。

学习曲线较陡峭,错误处理和调试可能相对困难。

缺点:

AsyncIO提供了一种编写单线程并发代码的方式,可以在等待I/O操作时执行其他任务,提高了I/O密集型任务的性能。

使用async/await语法,代码易读性较高。

并发框架(如Gevent,Tornado)

优点:

不同的框架有不同的API和设计理念,需要花时间学习。

某些框架可能与标准库或其他框架存在兼容性问题。

缺点:

提供了更高级别的抽象,使得并发编程更简单。

提供了一些额外的功能,如网络服务,可以更方便地创建复杂的网络应用。

任务队列(如Celery)

优点:

设置和配置Celery可能相当复杂。

对于简单的任务,使用Celery可能有点过度。

缺点:

能够处理复杂的分布式系统的任务,并行处理。

提供了任务调度,失败重试,结果存储等高级功能。

在选择具体技术时,你需要考虑你的任务类型(CPU密集还是I/O密集),以及你的特定需求,如是否需要处理大量的并发请求,或是否需要分布式处理等。

关键词:

习得:Python多线程与并发

大家好,我们来聊聊Python中的多线程与并发。最近在写一个项目,首先我[详细]
2023-06-18

不与夏虫语冰出处_不与夏虫语冰 即时

1、B语出《庄子-逍遥游》:北海若曰:“井蛙不可以语干海者,拘于虚也[详细]
2023-06-18

qq飞车如何双喷_qq飞车怎么双喷啊_每日动态

1、先改键。2、飘移键改成Q。3、道具键改成E。以上就是【qq飞车如何双[详细]
2023-06-18

环球热消息:一路走好!10天8位名人相继去世,有5人未满40岁,最年轻者仅21岁

天有不得风云,人有旦夕祸福。虽说生老病死是自然规律,但是每当看到一[详细]
2023-06-17

MIUI14进一步更新:变化很大,且下架很多东西!_环球热议

为了促进手机市场更好的发展,很多手机厂商都在开辟全新的道路,有的主[详细]
2023-06-17

修真小说神仙分级_修仙小说里分神期什么意思-最新

1、神,就是元神,分神就是把元神分离肉体,是元婴期后面的阶段,注意[详细]
2023-06-17

武器试验场 每日简讯

1、对武器装备进行试验、考核与鉴定的场所。2、武器试验场通过科学实验[详细]
2023-06-17

中国建筑1-5月地产业务销售额1910亿元|播报

新京报讯(记者寇德娜)6月16日,中国建筑股份有限公司(简称“中国建[详细]
2023-06-17

vivo X80智能接听设置介绍

vivoX80是一款很热门的手机,这款高性能的手机吸引了很多的新用户,但[详细]
2023-06-17

商务部:正推进加入CPTPP进程

中新社北京6月17日电(记者 李晓喻)中国商务部国际贸易谈判代表兼副[详细]
2023-06-17
版权所有: 纵横制冷网 All Rights Reserved
浙ICP备2022016517号-12
联系邮箱:51 46 76 11 3 @qq.com