Python 中多进程和线程的区别

Manav Narula 2023年1月30日 2022年5月17日
  1. Python 中线程和多进程之间的区别
  2. 在 Python 中使用 multiprocessing 模块执行多进程
  3. 在 Python 中使用 threading 模块执行多线程
Python 中多进程和线程的区别

多进程和线程是可以通过将程序分解为更小的任务来加速代码执行的技术。本教程将演示 Python 中的多进程与线程。

Python 中线程和多进程之间的区别

线程是用来控制执行流程的指令的小汇编,一个进程可以分成几个线程来提高效率。

在 Python 中,我们使用 threading 模块来执行多线程。一个进程通常被分成几个线程来执行较小的任务。

Global Interpreter Locker (GIL) 确保线程不会在 Python 中并行运行,而是一个接一个地并发执行。

另一方面,多进程是一种跨多个 CPU 内核运行进程的技术。这种方法通过同时运行多个进程来实现并行性。

这些进程可能被划分为多个线程,每个子进程都有自己的内存空间。这两种技术都允许代码同时运行,并且每种方法都有其优点和缺点。

我们现在将演示两个简单的多进程和线程程序。让我们从多进程开始。

在 Python 中使用 multiprocessing 模块执行多进程

多进程一次运行多个进程。每个进程都有自己的空间,运行互不干扰。

它有点简单,并充分利用了 CPU 的不同内核。但是,生成多个进程需要时间和大量内存。

它通常用于 CPU 密集型任务。为了在 Python 中执行多进程,我们使用 multiprocessing 模块。请参阅下面的代码。

import multiprocessing
def fun():
    print('Sample Process')
    
for i in range(5):
    p = multiprocessing.Process(target=fun)
    p.start()

输出:

Sample Process
Sample Process
Sample Process
Sample Process
Sample Process

multiprocessing.Process 构造函数在上面的示例中创建了一个 Process 类对象。target 参数用于提供进程启动时需要执行的目标函数。

我们还可以使用 multiprocessing.Process 构造函数中的 args 参数指定一些参数。start() 方法将启动该过程。

join() 方法可用于停止程序的执行,直到进程停止执行。

在 Python 中使用 threading 模块执行多线程

线程不需要太多内存,数据在多个线程之间共享。它们还需要很少的系统调用,对于 I/O 应用程序或者如果程序是网络绑定的,它们是一个很好的选择。

线程使应用程序更具响应性,但执行起来可能很复杂。此外,如果单个线程崩溃,整个程序可能会受到影响。

Python 中可能存在竞态条件;一个或多个线程尝试访问同一资源。同样,我们使用 threading 模块在 Python 中执行多线程。

请参阅下面的代码。

import threading
def fun():
    print('Sample Thread')
    
for i in range(5):
    p = threading.Thread(target=fun)
    p.start()

输出:

Sample Thread
Sample Thread
Sample Thread
Sample Thread
Sample Thread

threading.Thread 构造函数实例化 Thread 类的对象。我们像 Process 对象一样指定 Target 函数。

start() 函数启动线程。我们也可以对线程使用 join() 方法。此外,我们可以使用 Lock 对象来防止 Python 中的竞争条件。

Author: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

相关文章 - Python Threading