Python3.5多进程原理与用法实例分析

Python3.5多进程原理与用法实例分析

1. 多进程简介

多进程是一种方式,通过启动多个进程并发执行不同的任务,来提高程序的运行效率。Python中提供了多种方式实现多进程,包括subprocessmultiprocessingos.fork()等,其中multiprocessing是Python自带的一个多进程模块,其封装了底层的C语言模块_multiprocessing,提供了更加易用的多进程编程接口。

2. 多进程基础

2.1 创建进程

创建多个进程可以使用Process类。示例如下:

from multiprocessing import Process

def my_func(arg1, arg2):
    print("arg1:", arg1)
    print("arg2:", arg2)

if __name__ == '__main__':
    p = Process(target=my_func, args=(1, "hello"))
    p.start()
    p.join()

2.2 进程通信

多个进程之间可以进行通信,Python中提供了多种进程通信方式,包括QueuePipeManager等。示例如下:

from multiprocessing import Process, Queue

def worker(q):
    while True:
        item = q.get()
        if item is None:
            break
        print(item)

if __name__ == '__main__':
    q = Queue()
    p = Process(target=worker, args=(q,))
    p.start()

    q.put("hello")
    q.put("world")
    q.put(None)

    p.join()

3. 示例说明

3.1 示例1 - 计算圆周率

基于multiprocessing模块,计算圆周率。示例如下:

from multiprocessing import Process, Queue
import time

def calculate_pi(part_id, total_parts, queue):
    start = int((part_id - 1) * (1 / float(total_parts)) * 1000000 + 1)
    end = int(part_id * (1 / float(total_parts)) * 1000000)

    pi_sum = 0
    sign = 1

    for i in range(start, end + 1):
        pi_sum += sign * (1 / float(i))
        sign *= -1

    queue.put(pi_sum)

if __name__ == '__main__':
    t1 = time.time()
    total_parts = 10
    queue = Queue()

    processes =[Process(target=calculate_pi, args=(i, total_parts, queue)) for i in range(1, total_parts+1)]

    for p in processes:
        p.start()

    results = []
    for p in processes:
        p.join()
        results.append(queue.get())

    t2 = time.time()

    print("pi:", sum(results) * 4)
    print("elapsed time:", t2 - t1)

3.2 示例2 - 多进程下载文件

基于multiprocessing模块,使用多进程下载文件。示例如下:

from multiprocessing import Process, Queue
import os
import requests
import time

def download_file(url, file_path):
    response = requests.get(url, stream=True)
    with open(file_path, 'wb') as f:
        for chunk in response.iter_content(chunk_size=1024):
            if chunk:
                f.write(chunk)

if __name__ == '__main__':
    urls = [
        'http://mirror.centos.org/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Everything-2009.iso',
        'http://releases.ubuntu.com/20.04.2.0/ubuntu-20.04.2.0-desktop-amd64.iso',
        'https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-10.9.0-amd64-netinst.iso',
        'https://www.freebsd.org/ftp/releases/amd64/amd64/ISO-IMAGES/13.0/FreeBSD-13.0-RELEASE-amd64-disc1.iso'
    ]
    file_names = [os.path.basename(url) for url in urls]

    t1 = time.time()

    queue = Queue()
    processes = [Process(target=download_file, args=(url, file_name)) for url, file_name in zip(urls, file_names)]

    for p in processes:
        p.start()

    for p, file_name in zip(processes, file_names):
        p.join()
        print(file_name, "finished downloading.")

    t2 = time.time()

    print("total elapsed time:", t2 - t1)

以上是两个使用多进程的示例,分别演示了计算圆周率和多进程下载文件的场景。适当使用多进程,可以提高Python程序的运行效率。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python3.5多进程原理与用法实例分析 - Python技术站

(0)
上一篇 2023年6月6日
下一篇 2023年6月6日

相关文章

  • Python中的pandas表格模块、文件模块和数据库模块

    我来为您详细讲解“Python中的pandas表格模块、文件模块和数据库模块”的实例教程。 简介 Pandas 是基于 NumPy 的一种数据分析工具,它提供了大量高效的数据操作工具和数据结构,被广泛应用于数据清洗、分析和可视化等领域。Pandas 中的核心数据结构是 DataFrame,类似于 Excel 表格,可以处理大量的不同类型的数据。同时,Pand…

    python 2023年5月13日
    00
  • 解决Python保存文件名太长OSError: [Errno 36] File name too lon

    解决Python保存文件名太长OSError: [Errno 36] File name too long 的完整攻略如下: 问题描述 在使用Python保存文件时,有时候会出现类似于下面的错误: OSError: [Errno 36] File name too long 这是由于保存的文件名太长,超出了操作系统的限制所致。 解决方法 1. 重新命名文件名…

    python 2023年6月2日
    00
  • 详解Python Matplotlib解决绘图X轴值不按数组排序问题

    下面是详解Python Matplotlib解决绘图X轴值不按数组排序问题的完整攻略。 问题描述 在使用Python库Matplotlib进行绘图时,有时候在X轴上显示的数据值不会按照原始数组中的顺序排列,从而导致绘图结果不符合预期。 解决方案 获取原始数组中的索引 解决此问题的一种方案是,先获取原始数组中每个值的索引,然后按照索引的大小顺序重新排列数组。这…

    python 2023年5月18日
    00
  • python3 读取Excel表格中的数据

    下面是Python3读取Excel表格中的数据的详细实例教程。 安装依赖库 在开始之前,我们需要先安装以下依赖库: pandas:用于读取Excel表格 xlrd:用于读取xls格式的Excel文件 打开终端,执行以下命令进行安装: pip install pandas xlrd 读取Excel表格 案例一:读取Excel中的全部数据 首先,我们需要准备一个…

    python 2023年5月13日
    00
  • Mysql DateTime 查询问题解析

    下面是详细的MySQL DateTime查询问题解析的实例教程。 什么是DateTime DateTime是MySQL的一个时间格式,表示时间戳。在MySQL中,与时间相关的数据类型有多种,如DATE、TIME、DATETIME、TIMESTAMP等,而DateTime则是其中的一种常用类型。 DateTime的格式为:YYYY-MM-DD HH:MM:SS…

    python 2023年5月13日
    00
  • python操作 hbase 数据的方法

    本文将介绍如何使用 Python 操作 HBase 数据的方式。HBase 是基于 Hadoop 分布式文件系统 HDFS 的 NoSQL 数据库,支持海量数据存储和快速读写操作。 安装依赖 在使用 Python 操作 HBase 数据之前,需要先安装相应的依赖。这里我们使用 happybase 库来操作 HBase 数据。 pip install happ…

    python 2023年6月3日
    00
  • Python使用Tkinter实现滚动抽奖器效果

    让我来为你详细讲解一下“Python使用Tkinter实现滚动抽奖器效果”的完整攻略。 1. Tkinter简介 Tkinter是Python的标准GUI库,它提供了创建窗口和各种控件的方法。在Python中使用Tkinter可以快速方便地创建GUI应用程序。 2. 滚动抽奖器实现 2.1 初步实现 使用Tkinter实现滚动抽奖器可以通过Canvas、Sc…

    python 2023年6月13日
    00
  • Python实现考试自动答题的脚本分享

    下面是Python实现考试自动答题的脚本分享的完整攻略。 一、前置需求 在实现考试自动答题的脚本之前,需要掌握以下知识: Python编程语言,了解Python的基本语法和常用函数。 网络爬虫基础,了解HTML、CSS和JavaScript等前端基础知识。 Selenium Webdriver,可以通过Python操作浏览器,模拟人类的行为进行自动化操作。 …

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