美文网首页
python并发编程:并发编程中是选择多线程呢?还是多进程呢?还

python并发编程:并发编程中是选择多线程呢?还是多进程呢?还

作者: cf6d95617c55 | 来源:发表于2023-05-09 17:31 被阅读0次

    Python对并发编程的支持非常丰富,可以使用多线程、多进程、协程等方式进行并发编程。那么,应该如何选择呢?

    Python并发编程有哪些方式

    Python并发编程有三种方式:

    • 多线程Thread
    • 多进程Process
    • 多协程Coroutine

    什么是CPU密集型计算、IO密集型计算?

    CPU密集型(CPU-bound):

    CPU密集型也叫计算密集型,是指I/O在很短的时间就可以完成,CPU需要大量的计算和处理,特点是CPU占用率相当高。

    例如:

    • 压缩解压缩
    • 加解密
    • 正则表达式搜索

    IO密集型(I/O bound)

    IO密集型指的是系统运作大部分的状态是CPU在等待IO的读写操作,CPU占用率依然较低。

    例如:

    • 文件处理程序
    • 网络爬虫程序
    • 读写数据库程序

    多线程,多进程,多协程的对比

    python并发编程有三种方式: 多线程Thread多进程Process多协程Coroutine

    多线程Process(multiprocessing)

    优点:

    • 相比进程,更轻量级,占用资源少

    缺点:

    • 相比进程:多线程只能并发执行,不能利用多CPU(GIL)
    • 相比协程:启动书面有限制,占用内存资源,有线程切换开销

    使用于:IO密集型计算、同时运行的任务数目要求不多。

    多进程Thread(threading)

    优点:

    • 可以利用多核CPU并行运算

    缺点:

    • 占用资源最多、可以启动数目比线程少

    使用于:CPU密集型计算

    多协程Coroutine(asyncio)

    优点:

    • 内存开销最少。启动协程数目最多

    缺点:

    • 支持的库有限制(aiohttp VS requests)、代码实现复杂

    适用于:IO密集型计算、需要超多任务运行、但有现成库支持的场景

    怎样根据任务选择对应技术

    • 如果是CPU密集型计算,使用多进程multiprocessing
    • 如果是IO密集型计算,则考虑多线程或者多线程。
    • 如果任务量大,有现成协程库支持,协程实现的复杂度可接受则首选协程,否则选线程。

    本文由mdnice多平台发布

    相关文章

      网友评论

          本文标题:python并发编程:并发编程中是选择多线程呢?还是多进程呢?还

          本文链接:https://www.haomeiwen.com/subject/vfarsdtx.html