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等差数列求和公式前 100 项的和实例

    下面我将为你讲解如何使用Python来求解等差数列的前100项和,以及可能遇到的一些问题和解决方案。 什么是等差数列? 等差数列是指一个数列中任意两个相邻的项之间的差相等,这个相等的差值被称为等差数列的公差。 例如,下面的数列就是一个等差数列,其中公差为3: $$1, 4, 7, 10, 13, \cdots$$ 等差数列求和公式 对于一个从$a_1$开始,…

    python 2023年6月5日
    00
  • Python代码调试的几种方法总结

    Python代码调试的几种方法总结 调试是软件开发中必不可少的一环,有了良好的调试习惯和技能,可以大大提高代码的开发质量。Python作为一种脚本语言,特别适合快速开发,但开发中难免会遇到一些bug,本篇文章将介绍几种Python代码调试的方法。 方法一:print语句调试法 这可能是一种最传统的调试方法了,通过在代码中添加print语句,输出变量的值或执行…

    python 2023年5月13日
    00
  • 如何完美的建立一个python项目

    要建立一个完美的Python项目,您可以按照以下步骤进行操作: 1. 确定项目需求和目标 在开始编码之前,您应该明确项目的需求和目标。这将帮助您确定项目的范围,确定要编写的代码数量,并在开发过程中更好地控制项目的进度。 2. 确定项目名称和结构 确定项目名称是一个必要的步骤。在编写代码之前,创建一个主文件夹,并将项目的所有文件放入此文件夹。您可以参考以下示例…

    python 2023年5月30日
    00
  • python+selenium定时爬取丁香园的新型冠状病毒数据并制作出类似的地图(部署到云服务器)

    下面我会给出关于“python+selenium定时爬取丁香园的新型冠状病毒数据并制作出类似的地图(部署到云服务器)”的完整攻略,包含以下部分: 准备工作 安装必要的Python库 编写爬虫代码 制作地图 部署到云服务器 定时爬取丁香园的新型冠状病毒数据 其中,2-6部分为攻略的主要内容,下面我将详细讲解每一部分。 1. 准备工作 在开始操作之前,我们需要先…

    python 2023年5月18日
    00
  • python实现redis三种cas事务操作

    下面就来详细讲解Python实现Redis三种CAS事务操作的完整攻略: 什么是CAS操作? CAS是Compare And Swap的缩写,中文翻译为比较并交换。是一类常用的无锁算法,用于在并发环境下实现乐观锁。 在Redis中,CAS操作可以通过WATCH、MULTI、EXEC三条命令来实现。下面分别来讲解这三个命令的用法。 使用WATCH命令实现CAS…

    python 2023年5月19日
    00
  • Python 字符串转换为整形和浮点类型的方法

    下面是Python字符串转换为整形和浮点类型的方法的完整攻略。 字符串转换为整型 Python可以使用int()函数将字符串转换为整数。int()函数可以将一个字符串作为参数,然后返回一个整数。如果字符串无法转换为整数,则会抛出一个ValueError异常。 下面是一个例子,将字符串“123”转换为整数: num_str = "123" …

    python 2023年6月5日
    00
  • 详解Python 中sys.stdin.readline()的用法

    详解Python中sys.stdin.readline()的用法 1. 简介 sys.stdin 表示标准输入。sys.stdin.readline() 是读取一行标准输入的函数,返回的是字符串。与 input() 不同的是,sys.stdin.readline() 可以读取较长的字符串,以 ‘\n’ 为结束符。 2. 语法 下面就是 sys.stdin.r…

    python 2023年6月2日
    00
  • Django2.1.7 查询数据返回json格式的实现

    下面是详细讲解“Django2.1.7查询数据返回json格式的实现”的完整攻略。 前提条件 在实现查询数据返回 json 格式的过程中,你需要先掌握以下技术: Django 2.1.7 开发框架 数据库查询语句和操作,如 SQL、Django ORM 等 Python 语言基础,如变量、函数、列表、字典等 实现过程 定义视图函数 首先要完成的是视图函数的编…

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