Python 子进程与子进程池的应用

今天药忘吃喽~ 2022-09-10 01:21 356阅读 0赞

去年记录过一篇如何使用 Python 的线程,线程池的日志 Python 多线程编程, 需用到 threading.Thread, concurrent.futures.ThreadPoolExecutor。本文可以当作是上一文 Python 多线程编程的姊妹篇。

Python 的多线程受到 GIL(Global Interpreter Lock) 的限制,GIL 是一把加到了 Python 的解释器的锁,使得在任意时刻只允许一个 Python 进程使用 Python 解释器,也就是任意时刻,Python 只有一个线程在运行。

GIL 严重影响了计算密集型(CPU-bound) 的多线程程序,此时的多线程与单线程性能没什么差异,也发挥不了多核的威力。但对 I/O 密集型(I/O-bound) 影响不大,因为 CPU 多数时候是在等待。

为了突破 GIL 的 CPU 密集型程序的限制,可以使用非 CPython 解释器,如 Jython, IronPython 或 PyPy, 更为现实的做法就是使用子进程来替代线程去承担较为繁重的计算任务,因为 GIL 是加在进程上的,所以新的进程有独立的 GIL. 阅读全文 >>

发表评论

表情:
评论列表 (有 0 条评论,356人围观)

还没有评论,来说两句吧...

相关阅读

    相关 进程进程

    进程 进程(Process)是计算机中执行中的程序的实例。在操作系统中,每个进程都有自己的内存空间和系统资源,它们之间相互独立并且不会干扰彼此的运行。每个进程都由操作系统

    相关 Python subprocess进程模块

    子进程 正在运行的程序称为进程。每个进程都有自己的系统状态,包括内存、打开文件列表、跟踪正在执行的指令的程序计数器以及用于保存函数局部变量的调用堆栈。 通常,一个进程在单个