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

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日

相关文章

  • 关于Python的高级数据结构与算法

    下面是关于“Python的高级数据结构与算法”的完整攻略。 1. 高级数据结构 1.1 堆 堆是一种特殊的树形数据结构,它满足堆的性质对于每个节点x,它的父节点的值小于等于x的值。在Python中,我们可以使用heapq模块来实现。 import heapq # 创建一个堆 my_heap = [] heapq.heappush(my_heap, 3) he…

    python 2023年5月13日
    00
  • Python 实现敏感目录扫描的示例代码

    Python 实现敏感目录扫描的示例代码 在进行网络安全测试时,敏感目录扫描是一项重要的任务。使用 Python 可以实现自动化敏感目录扫描的过程。以下是 Python 实现敏感目录扫描的示例代码的详细介绍。 1. 使用 requests 模块进行敏感目录扫描 requests 是一个流行的 Python HTTP 库,可以用来发送 HTTP 请求。可以使用…

    python 2023年5月15日
    00
  • Django结合ajax进行页面实时更新的例子

    首先我们需要了解什么是Django和ajax。 Django是一个高效、可扩展、开源的Web框架,它使用Python语言编写,可以帮助开发人员快速构建复杂的Web应用程序。而ajax则是一种用于交互式Web应用程序中的技术,可以帮助我们在不刷新整个页面的情况下更新部分页面内容。 基于这两个技术,我们可以使用Django结合ajax进行页面的实时更新。下面详细…

    python 2023年6月3日
    00
  • 详解Django中 render() 函数的使用方法

    详解Django中render()函数的使用方法 在Django中,render()函数是常用的视图函数,用于渲染模板并返回HttpResponse对象。本文将详细介绍Django中render()函数的使用方法,并提供两个示例。 render()函数的基本用法 render()函数的基本用法如下: from django.shortcuts import …

    python 2023年5月15日
    00
  • Python3+Django get/post请求实现教程详解

    Python3+Django get/post请求实现教程详解 Django 是一个流行的 Python Web 框架,可以用于开发各种 Web 应用程序。本文将详细介绍如何使用 Django 实现 get/post 请求的方法。 1. 创建 Django 项目 首先,我们需要创建一个 Django 项目。可以使用以下命令来创建: django-admin …

    python 2023年5月15日
    00
  • python geopandas读取、创建shapefile文件的方法

    下面是Python Geopandas读取、创建Shapefile文件的方法的完整攻略。 什么是 Geopandas Geopandas 是一个基于 Pandas 库拓展出来的一个开源库,主要用于地理空间数据的处理和分析。它可以在 Python 中轻松读取、处理和可视化地理空间数据。 读取 Shapefile 文件 Shapefile 是 ESRI 公司开发…

    python 2023年6月3日
    00
  • Python利用Matplotlib绘图无法显示中文字体的解决方案

    以下是详细讲解“Python利用Matplotlib绘图无法显示中文字体的解决方案”的完整攻略。 问题描述 在使用Python的Matplotlib库进行绘图时,有时候会遇到无法显示中文字体的问题。比如,我们在绘制一个柱状图的时候,想要使用中文作为横轴和纵轴的标签,但是结果出现了乱码或者显示为空。 原因分析 这个问题主要是因为Matplotlib默认不支持中…

    python 2023年5月18日
    00
  • php判断终端是手机还是电脑访问网站的思路及代码

    要判断终端是手机还是电脑访问网站,我们可以通过判断HTTP请求头中的User-Agent信息来实现。不同终端的User-Agent信息是有区别的,我们可以根据这个信息来判断。 以下是实现的思路和代码: 1. 获取HTTP请求头中的User-Agent信息 在PHP中,可以通过$_SERVER[‘HTTP_USER_AGENT’]来获取HTTP请求头中的Use…

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