详解python之多进程和进程池(Processing库)

yizhihongxing

详解Python之多进程和进程池

一、多进程概念

进程是系统资源分配的最小单位,一个进程可以有多个线程,这些线程共享进程的内存空间和系统资源。在Python中,可以通过multiprocessing模块实现多进程的功能。

二、多进程的好处

  1. 充分利用多核CPU,提升程序运行效率;
  2. 进程之间独立,一个进程挂掉不会影响其他进程的运行;
  3. 可以利用操作系统的进程管理机制,避免出现死锁现象。

三、多进程的实现方式

3.1 普通多进程

使用multiprocessing模块的Process类可以实现简单的多进程,示例代码如下:

from multiprocessing import Process

def func():
    print('子进程执行')

if __name__ == '__main__':
    p = Process(target=func)
    p.start()
    p.join()
    print('主进程执行')

代码解析:

  1. 通过multiprocessing模块的Process类创建子进程,并指定执行函数为func()
  2. 子进程通过调用指定的函数进行任务处理;
  3. 主进程通过p.join()方法等待子进程执行完毕,再执行后续代码。

3.2 进程池

使用进程池可以避免频繁创建和销毁进程,从而提高程序的执行效率。使用multiprocessing模块的Pool类可以实现进程池,示例代码如下:

from multiprocessing import Pool
import os
import time

def func(n):
    print(f'子进程{os.getpid()}执行{n}')
    time.sleep(1)
    return n

if __name__ == '__main__':
    p = Pool(3)
    results = p.map(func, range(10))
    print(results)

代码解析:

  1. 通过multiprocessing模块的Pool类创建进程池,并指定最大进程数为3,即同时运行3个子进程;
  2. 子进程通过调用指定的函数进行任务处理,这里模拟了任务处理需要一定时间的情况;
  3. 主进程通过p.map()方法向进程池中添加任务,并等待任务执行完毕;
  4. p.map()方法返回一个结果集,结果集的元素按照任务添加的顺序排列。

四、总结

多进程和进程池是Python中实现并行计算的重要方式,能够充分利用多核CPU提高程序运行效率。multiprocessing模块是Python标准库中提供的多进程处理模块,使用简单,功能强大,值得掌握和使用。

五、示例

5.1 利用进程池进行网络爬虫

利用Python的并行计算,可以有效提升网络爬虫的效率。下面是一个简单的示例:

import requests
from bs4 import BeautifulSoup
from multiprocessing import Pool

def get_url(url):
    response = requests.get(url)
    soup = BeautifulSoup(response.content)
    title = soup.select_one('title').text
    return title

if __name__ == '__main__':
    urls = ['https://www.baidu.com', 'https://www.google.com', 'https://www.bing.com']
    p = Pool(len(urls))
    results = p.map(get_url, urls)
    print(results)

代码解析:

  1. get_url()函数中通过requestsBeautifulSoup模块获取网页标题;
  2. 在主程序中创建进程池,并向进程池中添加子进程任务;
  3. p.map()方法返回所有子进程处理的结果。

5.2 利用多进程进行图片下载

多进程能够大大提高图片的下载效率,下面是一个简单的示例:

import requests
from multiprocessing import Process

def download(image_url, path):
    response = requests.get(image_url)
    with open(path, 'wb') as f:
        f.write(response.content)

if __name__ == '__main__':
    urls = [
        ('https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png', 'google.png'),
        ('https://www.baidu.com/img/bd_logo1.png', 'baidu.png')
    ]
    processes = [Process(target=download, args=(url[0], url[1])) for url in urls]
    for process in processes:
        process.start()
    for process in processes:
        process.join()

代码解析:

  1. download()函数中通过requests模块下载图片,并保存到指定路径;
  2. 在主程序中创建多个子进程,并将每个子进程的任务指定为下载指定的图片;
  3. 通过循环遍历所有子进程,并对其进行启动和等待。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解python之多进程和进程池(Processing库) - Python技术站

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

相关文章

  • 在python中使用requests 模拟浏览器发送请求数据的方法

    以下是关于在Python中使用requests模拟浏览器发送请求数据的方法的攻略: 在Python中使用requests模拟浏览器发送请求数据的方法 requests是Python中一个流行的HTTP库,可以用于向Web服务器发送HTTP请求和接响应。在某些情况下,我们需要模拟浏览器发送请求数据,以便获取完整的响应内容。以下是在Python中使用reques…

    python 2023年5月14日
    00
  • 如何使用Python进行大数据处理?

    使用Python进行大数据处理通常需要使用一些专门的库和工具,比如pandas、numpy、dask、hadoop、spark等。下面是一个较为完整的攻略: 安装必要的库和工具 首先需要安装Python以及必要的库和工具。可以采用anaconda等集成Python及其常用库和工具的发行版,也可以手动安装Python并使用pip等包管理工具安装需要的库和工具。…

    python 2023年4月19日
    00
  • Python自动化测试之登录脚本的实现

    下面我将详细讲解“Python自动化测试之登录脚本的实现”的完整攻略。 Python自动化测试之登录脚本的实现 什么是自动化测试 自动化测试是指利用自动化工具对软件系统进行测试,提高测试效率和测试质量的过程。相比于手动测试,自动化测试可以节省时间和人力成本,同时提高测试的覆盖率和准确性。 登录脚本的实现 环境准备 首先我们需要准备以下软件和工具: Pytho…

    python 2023年5月19日
    00
  • Python实现快速保存微信公众号文章中的图片

    在Python中,我们可以使用requests和BeautifulSoup库来实现快速保存微信公众号文章中的图片。以下是一个基本的示例代码: import requests from bs4 import BeautifulSoup import os url = ‘https://mp.weixin.qq.com/s/xxxxxxxxxxxxx’ # 文章…

    python 2023年5月14日
    00
  • Python 抓取动态网页内容方案详解

    当我们需要获取动态网页的内容时,传统的爬虫方式已经无法满足需求,这时候我们可以考虑使用Python抓取动态网页内容。下面是Python抓取动态网页内容的详细攻略: 网页内容加载方式 动态网页与静态网页的主要区别在于内容的加载方式。静态网页内容都是在服务器上生成好的,客户端只需要请求一次,就可以得到完整的html代码,而动态网页的内容是通过JavaScript…

    python 2023年5月14日
    00
  • Python入门必须知道的11个知识点

    Python入门必须知道的11个知识点 Python是一种简单易学、功能强大的编程语言,已经得到了广泛的应用。下面是入门Python必须知道的11个知识点,包括变量、数据类型、运算符、条件语句、循环语句、函数、模块、I/O操作、异常处理、面向对象编程和常用的第三方库。 变量 变量是用来存储数据的容器,Python中的变量不需要事先声明数据类型,可以直接赋值。…

    python 2023年6月5日
    00
  • Python中列表(List) 的三种遍历(序号和值)方法小结

    当我们需要对Python中的列表(List)进行遍历时,有三种常用方法来获取列表中的元素。本篇攻略将详细讲解如何使用这三种方法。 一、for循环迭代列表 使用for循环可以轻松遍历列表中的所有元素,下面是for循环遍历列表的代码示例: fruits = [‘apple’, ‘banana’, ‘orange’, ‘grape’] for fruit in f…

    python 2023年6月3日
    00
  • Python 实现驱动AI机器人

    Python 实现驱动AI机器人攻略 确定机器人的使用场景 在实现的过程中首先需要确定机器人的使用场景,有了使用场景才能明确机器人的功能和任务。例如,机器人的使用场景为智能客服,那么机器人需要具备语音识别、自然语言处理、用户管理等功能,实现自动回答用户问题、预测用户需求等多个任务。 选择机器人的平台和框架 机器人的平台和框架决定了机器人的实现方式和开发技术栈…

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