python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python多进程模块

深入探究Python中的多进程模块用法实例

作者:简讯Alfred 爱生活爱扣钉

多进程是计算机编程中的一个概念,也可以说是一种可用于实现并行性和利用多个 CPU 内核或处理器并发执行任务的技术,在本文中,我们将学习有关 python 中多进程处理的所有知识、理论和实际使用代码

什么是多进程

多进程是计算机编程中的一个概念,也可以说是一种可用于实现并行性和利用多个 CPU 内核或处理器并发执行任务的技术。这种技术尤其适用于受 CPU 限制的任务,并行执行可以提高程序的性能。Python 提供了多进程模块来处理多个进程。

多进程(Multiprocessing)是一种计算机编程和执行范式,涉及多个进程或程序的同时执行,方法是根据我们正在处理的问题或设置,在单台计算机或多台计算机上利用多个 CPU 内核或处理器。

多进程是并行的一种形式,旨在通过允许任务并发执行来提高程序性能和效率,从而有效利用可用的计算资源。

下文将讨论多进程的几个组成部分。

多线程与多进程的区别

想象一下你和两个助手在厨房里做饭。多线程就像是让这两个助手在同一个厨房里完成一项任务。这无疑会加快进程,两个人同时完成一项任务。在同一个厨房工作的这些助手可以共享相同的食材,可以互相交流,可以轻松分担任务。但是也可能会变得混乱,他们在工作时可能会相互碰撞,从而破坏所有的进度。

多进程就像有两个帮手,在两个不同的厨房工作,使用各自的食材和个人空间。这些助手可以独立工作,互不干扰,但如果他们需要分享食材或交谈,就必须使用电话。

从这个例子中,我们可以了解到,多线程是一种很好的技术,适用于助手不需要频繁移动的任务,因为处理器不需要使用大量资源。然而多进程更适合需要大量移动的任务,或者从技术上讲需要同时使用内核的大量资源的任务。

如果我们用一句话来定义,多线程主要是实现并发性,允许任务在时间上重叠,而多进程则是实现真正的并行性,因为每个进程都在不同的 CPU 内核或处理器上独立运行。

在 python 中执行多进程的第一步是导入模块。

import multiprocessing

我们要使用多进程来运行一个程序。让我们创建一个用户自定义程序示例,看看如何操作:

def test():
  print("This is my sample program")

test()

# Output:
# This is my sample program

要使用多进程调用该程序,我们将使用以下代码。

import multiprocessing

def test01():
  print("This is a sample multiprocessing program")

if __name__ == "__main__":
  m = multiprocessing.Process(target=test01)
  print("this is my main program")

  # start the program
  m.start()

  # stop/terminate the program and release the resource
  m.join()

在上面的代码中,我们通过 main 函数使用多进程调用我们要处理的程序。并且确保只有在直接执行该脚本时,而不是作为模块导入时,代码才会运行。

我们还可以在其他函数中使用多进程,执行一些逻辑运算,下面给出了一个例子。

import multiprocessing

def square(n):
  return n**2

if __name__ == '__main__':
  with multiprocessing.Pool(processes=5) as pool:
    out = pool.map(square, [12,2,3,5,23,14,26,8,4,6])
    print(out)

# Output:
# [144, 4, 9, 25, 529, 196, 676, 64, 16, 36]

并行执行函数

运行多个进程

我们可以使用多进程技术在多个内核上运行多个进程。我们创建并启动多个进程,每个进程都运行带有一组参数的函数 "workers"(如下代码所示)。我们使用 "args "来指定函数要使用的参数列表。

在下面的代码中,我们使用多进程的概念,使用 4 个进程来处理程序。为此,我们使用了 python 中多进程模块的 Process 方法。

def workers(num):
    print(f"Worker number {num}")

if __name__ == "__main__":
    processes = []
    for i in range(4):
        process = multiprocessing.Process(target=workers, args=(i,))
        processes.append(process)
        process.start()

    for process in processes:
        process.join()

Output:
Worker number 0
Worker number 1
Worker number 2
Worker number 3

进程间共享数据

使用 multiprocessing.Queue

multiprocessing.Queue 是 Python 编程语言中的一个类,由 multiprocessing 模块提供,我们用它来执行 python 中的多进程处理。这里的 Queue 用于促进多进程程序中不同进程之间的通信和数据交换。

multiprocessing.Queue 的一些主要功能和用途如下:

在使用 Python 进行并行或并发处理时,multiprocessing.Queue 是一个非常有用的工具,尤其是在多个进程需要共享和协调数据的情况下。

下面的单元格给出了一个如何使用 multiprocessing.Queue 的示例:生产者进程生产数据或将数据放入队列,消费者进程从队列中消费数据。多进程队列 确保了两个进程之间安全的数据交换。

import multiprocessing
import time
#defining our function we want to apply multiprocessing on
#01 the producer function to add elements in the queue
def producer(q):
  for item in range(5):
    q.put(item)
    print(f"Produced:  {item}")
#02 consumer function to get elements from the queue
def consumer(q):
  while True:
    item = q.get()
    if item is None:
      break
    print(f"Consumed: {item}")
if __name__ == "__main__":
  #creating a multiprocessing queue
  q = multiprocessing.Queue()
  #creating the producer and consumer processes
  producer_process = multiprocessing.Process(target=producer, args=(q,))
  consumer_process = multiprocessing.Process(target=consumer, args=(q,))
  #starting the processes
  producer_process.start()
  consumer_process.start()
  #finish the producer, signal the consumer to exit
  producer_process.join()
  q.put(None) #signaling the consumer about no more data in the queue
  consumer_process.join()
Output:
Produced:  0
Produced:  1
Consumed: 0Produced:  2
Produced:  3Consumed: 1
Produced:  4
Consumed: 2
Consumed: 3
Consumed: 4

进程池

使用 multiprocessing.Pool 类

multiprocessing.Pool 是 python 中 multiprocessing 模块提供的另一个类。它用于创建和管理可并行执行任务的进程池。该类简化了并行任务并将其分配给多个进程的过程。

下面列出了 multiprocessing.Pool 的一些功能和用途。

下面的单元格显示了一个使用 multiprocessing.Pool 的示例代码,通过一个返回给定数字平方的简单函数对进程进行多进程处理。

def square(x):
  return x**2 
if __name__=='__main__':
  #create a multiprocessing pool with 4 worker processes
  with multiprocessing.Pool(processes=4) as pool:
    #distribute the tasks among worker processes and collect results
    results = pool.map(square, [2,5,3,2,1,7,8,5,6,2,2,3])
    #print the results
    print(results)
Output:
[4, 25, 9, 4, 1, 49, 64, 25, 36, 4, 4, 9]

以上就是深入探究Python中的多进程用法实例的详细内容,更多关于Python 多进程的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文