Python多进程之进程池

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
实时计算 Flink 版,5000CU*H 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
简介: 由于Python中线程封锁机制,导致Python中的多线程并不是正真意义上的多线程。当我们有并行处理需求的时候,可以采用多进程迂回地解决。

由于Python中线程封锁机制,导致Python中的多线程并不是正真意义上的多线程。当我们有并行处理需求的时候,可以采用多进程迂回地解决。

如果要在主进程中启动大量的子进程,可以用进程池的方式批量创建子进程。
首先,创建一个进程池子,然后使用apply_async()方法将子进程加入到进程池中。

import multiprocessing
import os
import time
from datetime import datetime


def subprocess(number):
    # 子进程
    print('这是第%d个子进程' % number)
    pid = os.getpid()  # 得到当前进程号
    print('当前进程号:%s,开始时间:%s' % (pid, datetime.now().isoformat()))
    time.sleep(30)  # 当前进程休眠30秒
    print('当前进程号:%s,结束时间:%s' % (pid, datetime.now().isoformat()))


def mainprocess():
    # 主进程
    print('这是主进程,进程编号:%d' % os.getpid())
    t_start = datetime.now()
    pool = multiprocessing.Pool()
    for i in range(8):
        pool.apply_async(subprocess, args=(i,))
    pool.close()
    pool.join()
    t_end = datetime.now()
    print('主进程用时:%d毫秒' % (t_end - t_start).microseconds)


if __name__ == '__main__':
    # 主测试函数
    mainprocess()

Pool对象调用join()方法会等待所有子进程执行完毕,调用join()之前必须先调用close(),调用close()之后就不能继续添加新的Process了。
可能的运行结果:

这是主进程,进程编号:10264
这是第0个子进程
当前进程号:10688,开始时间:2017-04-05T11:23:47.039989
这是第1个子进程
当前进程号:10152,开始时间:2017-04-05T11:23:47.055615
这是第2个子进程
当前进程号:5764,开始时间:2017-04-05T11:23:47.055615
这是第3个子进程
当前进程号:6392,开始时间:2017-04-05T11:23:47.055615
这是第4个子进程
当前进程号:9744,开始时间:2017-04-05T11:23:47.055615
这是第5个子进程
当前进程号:2636,开始时间:2017-04-05T11:23:47.071240
这是第6个子进程
当前进程号:6788,开始时间:2017-04-05T11:23:47.071240
这是第7个子进程
当前进程号:1604,开始时间:2017-04-05T11:23:47.071240
当前进程号:10688,结束时间:2017-04-05T11:24:17.053047
当前进程号:10152,结束时间:2017-04-05T11:24:17.062183
当前进程号:5764,结束时间:2017-04-05T11:24:17.062183
当前进程号:9744,结束时间:2017-04-05T11:24:17.062183
当前进程号:6392,结束时间:2017-04-05T11:24:17.062183
当前进程号:2636,结束时间:2017-04-05T11:24:17.072177
当前进程号:6788,结束时间:2017-04-05T11:24:17.072177
当前进程号:1604,结束时间:2017-04-05T11:24:17.072177
主进程用时:255168毫秒

官方API文档说明:

close()
Prevents any more tasks from being submitted to the pool. Once all the tasks have been completed the worker processes will exit.

join()
Wait for the worker processes to exit. One must call close() or terminate() before using join().
目录
相关文章
|
3月前
|
并行计算 数据处理 调度
Python中的并发编程:探索多线程与多进程的奥秘####
本文深入探讨了Python中并发编程的两种主要方式——多线程与多进程,通过对比分析它们的工作原理、适用场景及性能差异,揭示了在不同应用需求下如何合理选择并发模型。文章首先简述了并发编程的基本概念,随后详细阐述了Python中多线程与多进程的实现机制,包括GIL(全局解释器锁)对多线程的影响以及多进程的独立内存空间特性。最后,通过实例演示了如何在Python项目中有效利用多线程和多进程提升程序性能。 ####
|
3月前
|
调度 iOS开发 MacOS
python多进程一文够了!!!
本文介绍了高效编程中的多任务原理及其在Python中的实现。主要内容包括多任务的概念、单核和多核CPU的多任务实现、并发与并行的区别、多任务的实现方式(多进程、多线程、协程等)。详细讲解了进程的概念、使用方法、全局变量在多个子进程中的共享问题、启动大量子进程的方法、进程间通信(队列、字典、列表共享)、生产者消费者模型的实现,以及一个实际案例——抓取斗图网站的图片。通过这些内容,读者可以深入理解多任务编程的原理和实践技巧。
204 1
|
4月前
|
Python
Python中的多线程与多进程
本文将探讨Python中多线程和多进程的基本概念、使用场景以及实现方式。通过对比分析,我们将了解何时使用多线程或多进程更为合适,并提供一些实用的代码示例来帮助读者更好地理解这两种并发编程技术。
|
3月前
|
监控 JavaScript 前端开发
python中的线程和进程(一文带你了解)
欢迎来到瑞雨溪的博客,这里是一位热爱JavaScript和Vue的大一学生分享技术心得的地方。如果你从我的文章中有所收获,欢迎关注我,我将持续更新更多优质内容,你的支持是我前进的动力!🎉🎉🎉
46 0
|
4月前
|
存储 Python
Python中的多进程通信实践指南
Python中的多进程通信实践指南
51 0
|
消息中间件 Java Python
Python网络编程(进程池、进程间的通信)
Python网络编程 Python进程池 Python进程间的通信
19151 0
|
2月前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
2月前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
2月前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
126 80
|
21天前
|
存储 缓存 Java
Python高性能编程:五种核心优化技术的原理与Python代码
Python在高性能应用场景中常因执行速度不及C、C++等编译型语言而受质疑,但通过合理利用标准库的优化特性,如`__slots__`机制、列表推导式、`@lru_cache`装饰器和生成器等,可以显著提升代码效率。本文详细介绍了这些实用的性能优化技术,帮助开发者在不牺牲代码质量的前提下提高程序性能。实验数据表明,这些优化方法能在内存使用和计算效率方面带来显著改进,适用于大规模数据处理、递归计算等场景。
58 5
Python高性能编程:五种核心优化技术的原理与Python代码