Python多进程编程常用方法解析

yizhihongxing

Python多进程编程常用方法解析

Python作为一门高级编程语言,在多进程编程方面表现优异。多进程编程可以有效地利用计算机的多核心CPU资源,加速程序执行速度,提高程序的效率和性能。

本文将介绍Python多进程编程常用的方法并提供示例进行说明。

多进程编程常用方法

1. multiprocessing模块

multiprocessing模块是Python内置的多进程编程库,它可以创建进程池,利用进程池来处理耗时的任务,提高程序执行效率。multiprocessing模块常用的类和函数有:

  • Process类:创建新进程。
  • Pool类:创建进程池。
  • Queue类:实现进程之间的通信。

示例1:创建新进程

import multiprocessing

def child_process():
    print("子进程PID:", multiprocessing.current_process().pid)

if __name__ == '__main__':
    print("主进程PID:", multiprocessing.current_process().pid)
    p = multiprocessing.Process(target=child_process)
    p.start()
    p.join()

输出:

主进程PID: 1000  
子进程PID: 1001

示例2:创建进程池

import multiprocessing
import time

def task(n):
    print("Process %d is running..." % multiprocessing.current_process().pid)
    time.sleep(n)
    print("Process %d is done." % multiprocessing.current_process().pid)

if __name__ == '__main__':
    start_time = time.time()

    pool = multiprocessing.Pool(processes=3)
    for i in range(5):
        pool.apply_async(task, (i+1,))

    pool.close()
    pool.join()

    print("All processes are done.")
    print("Time used: %f" % (time.time() - start_time))

输出:

Process 1001 is running...
Process 1002 is running...
Process 1003 is running...
Process 1002 is done.
Process 1004 is running...
Process 1001 is done.
Process 1003 is done.
Process 1005 is running...
Process 1004 is done.
Process 1005 is done.
All processes are done.
Time used: 5.045492

2. concurrent.futures模块

concurrent.futures模块是Python 3.2开始引入的多进程编程模块,它提供了高层次的、面向对象的接口来管理并发任务。concurrent.futures常用的类和函数有:

  • ThreadPoolExecutor类:创建线程池。
  • ProcessPoolExecutor类:创建进程池。
  • as_completed函数:按照完成顺序返回Future对象。

示例1:创建线程池

import concurrent.futures
import time

def task(n):
    print("Thread %d is running..." % threading.current_thread().ident)
    time.sleep(n)
    print("Thread %d is done." % threading.current_thread().ident)

if __name__ == '__main__':
    start_time = time.time()

    with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:
        futures = [executor.submit(task, i+1) for i in range(5)]

    print("All threads are done.")
    print("Time used: %f" % (time.time() - start_time))

输出:

Thread 140076328464192 is running...
Thread 140076327052288 is running...
Thread 140076319659584 is running...
Thread 140076328464192 is done.
Thread 140076327052288 is done.
Thread 140076317266880 is running...
Thread 140076319659584 is done.
Thread 140076317266880 is done.
Thread 140076337891584 is running...
Thread 140076337891584 is done.
All threads are done.
Time used: 5.012223

示例2:创建进程池

import concurrent.futures
import time

def task(n):
    print("Process %d is running..." % multiprocessing.current_process().pid)
    time.sleep(n)
    print("Process %d is done." % multiprocessing.current_process().pid)
    return n**2

if __name__ == '__main__':
    start_time = time.time()

    with concurrent.futures.ProcessPoolExecutor(max_workers=3) as executor:
        futures = [executor.submit(task, i+1) for i in range(5)]

        results = []
        for future in concurrent.futures.as_completed(futures):
            result = future.result()
            results.append(result)
            print("Result: ", result)

    print("All processes are done.")
    print("Results: ", results)
    print("Time used: %f" % (time.time() - start_time))

输出:

Process 1003 is running...
Process 1002 is running...
Process 1001 is running...
Result:  1
Process 1001 is done.
Process 1001 is running...
Result:  4
Process 1001 is done.
Process 1001 is running...
Result:  9
Process 1003 is done.
Process 1003 is running...
Result:  16
Process 1003 is done.
Process 1003 is running...
Result:  25
Process 1003 is done.
All processes are done.
Results:  [1, 4, 9, 16, 25]
Time used: 5.043380

结论

以上是Python多进程编程常用的方法介绍及示例说明,不同的方法适用于不同场景和需求,应根据实际情况进行选择和使用。在实际应用中,还需要注意多进程编程的资源管理和同步问题,以避免出现死锁、资源泄露等问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python多进程编程常用方法解析 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Pytorch中transforms.Resize()的简单使用

    下面是关于PyTorch中transforms.Resize()函数的详细讲解。 1. transforms.Resize()函数概述 transforms.Resize()函数是PyTorch中transforms模块提供的一个图像处理函数,它可以对图像进行缩放操作。具体来说,这个函数可以将输入图像的尺寸调整为给定的目标尺寸。 该函数的输入参数包括目标尺寸…

    python 2023年5月19日
    00
  • Python多线程编程(八):使用Event实现线程间通信

    我们来详细讲解一下Python多线程编程中使用Event实现线程间通信的完整攻略。 什么是Event? Event是Python中内置的一个线程同步机制,它是一种简单的线程间通信方式。在多个线程之间,一个线程可以通过设置Event来通知其他线程,其他线程也可以通过检查Event的状态来判断是否有通知需要处理。 Event的使用方法 在使用Event时,一般需…

    python 2023年5月19日
    00
  • python中Lambda表达式详解

    Lambda表达式是Python中的一种匿名函数,它可以在不定义函数名称的情况下创建一个函数对象。本攻略将介绍Lambda表达式的语法、用法和示例。 Lambda表达式的语法 Lambda表达式的语法如下: lambda arguments: expression 其中,arguments是函数的参数,可以是一个或多个参数,用逗号分隔。expression是…

    python 2023年5月15日
    00
  • 通过实例了解Python异常处理机制底层实现

    以下是详细讲解“通过实例了解Python异常处理机制底层实现”的完整攻略: 什么是异常 在程序运行过程中,如果出现了错误或异常,程序就可能中断执行,并输出错误消息。在 Python 中,这些错误或异常被称为“异常”。Python 异常处理机制可以在程序出现异常时,向上抛出异常,直到被捕获或者终止程序,确保程序的可靠性和稳定性。 Python 异常处理机制底层…

    python 2023年5月13日
    00
  • Python配置mysql的教程(推荐)

    下面我将为你详细讲解“Python配置MySQL的教程(推荐)”的完整攻略。具体过程如下: 第一步:安装MySQL及其驱动 在Python中连接MySQL需要使用Python的MySQL驱动程序,官方推荐的驱动程序为mysql-connector-python。因此在配置MySQL之前,需要执行以下命令进行安装: pip install mysql-conn…

    python 2023年5月13日
    00
  • Python实现无损放大图片的示例代码

    针对这个主题,以下是我对应的完整攻略: Python实现无损放大图片的示例代码 什么是无损放大? “无损放大”是指在不损失图片质量的情况下,将图片进行放大操作,使图片的分辨率变高。与之相对的是“有损放大”,也就是通过插值等技术进行放大,但是在过程中会丢失部分原本的图片信息,导致放大后的图片像素不清晰或出现锯齿等。 实现方法 Python的pillow库提供了…

    python 2023年5月19日
    00
  • 利用Python判断文件的几种方法及其优劣对比

    以下是利用Python判断文件的几种方法及其优劣对比的攻略。 一、判断文件是否存在 在Python中,我们可以使用os.path模块中的exists()函数来判断文件是否存在。具体操作示例如下: import os file_path = ‘path/to/file.txt’ # 替换为目标文件的路径 if os.path.exists(file_path)…

    python 2023年6月2日
    00
  • Python图形用户界面与游戏开发实例详解

    Python图形用户界面与游戏开发实例详解 概述 这篇攻略主要涵盖了Python图形用户界面与游戏开发方面的知识。其中,图形用户界面部分主要讲解了Python中的GUI库,主要包括Tkinter和PyQt。游戏开发部分主要涉及Pygame的使用,介绍了如何用Python开发2D游戏。 图形用户界面 Tkinter Tkinter是Python自带的GUI库,…

    python 2023年5月30日
    00
合作推广
合作推广
分享本页
返回顶部