iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python多进程库multiprocessing有什么作用
  • 256
分享到

Python多进程库multiprocessing有什么作用

2023-06-15 12:06:19 256人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要讲解了“python多进程库multiprocessing有什么作用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python多进程库multiprocessing有什么作用”吧

这篇文章主要讲解了“python多进程库multiprocessing有什么作用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python多进程库multiprocessing有什么作用”吧!

前言

multiprocessing库是基于threading  api,它可以把工作划分为多个进程。有些情况下,multiprocessing可以作为临时替换取代threading来利用多个CPU内核,相应地避免Python全局解释器所带来的计算瓶颈。

下面,我们来看看multiprocessing库创建进程与threading库有多像。

创建一个进程

要创建一个进程,最简单的方式是用一个目标函数实例化一个Process对象,然后与threading一样调用start()函数让它工作。示例如下:

import multiprocessing  def worker():     for i in range(3):         print(i)  if __name__=="__main__":     p = multiprocessing.Process(target=worker)     p.start()

运行之后,效果如下:

Python多进程库multiprocessing有什么作用

需要注意的是,multiprocessing库在windows创建进程必须在if __name__=="__main__":中,这是 Windows  上多进程的实现问题。在 Windows 上,子进程会自动 import 启动它的这个文件,而在 import  的时候是会执行这些语句的。如果直接创建就会无限递归创建子进程报错。所以必须把创建子进程的部分用那个 if 判断保护起来,import 的时候 __name__  不是 __main__ ,就不会递归运行了。

设置进程名

在threading线程中,我们可以通过其参数name设置线程名,同样的我们也可以通过name参数设置其进程的名字。示例如下:

import multiprocessing import time  def worker():     print(multiprocessing.current_process().name, "start")     time.sleep(2)     print(multiprocessing.current_process().name, "end")  if __name__ == "__main__":     p1 = multiprocessing.Process(name='p1', target=worker)     p2 = multiprocessing.Process(name='p2', target=worker)     p3 = multiprocessing.Process(name='p3', target=worker)     p1.start()     p2.start()     p3.start()

运行之后,效果如下:

Python多进程库multiprocessing有什么作用

守护进程

和线程一样,在所有子进程没有退出之前,主程序是不会退出的。有时候,我们可能需要启动一个后台进程,它可以一直运行而不阻塞主程序退出。

要标志一个守护进程,可以将其添加第3个参数daemon,设置为True。默认值为False,不作为守护进程。示例如下:

import multiprocessing import time  def worker():     print(multiprocessing.current_process().name, "start")     time.sleep(1)     print(multiprocessing.current_process().name, "end")  def worker2():     print(multiprocessing.current_process().name, "start")     time.sleep(2)     print(multiprocessing.current_process().name, "end")  if __name__ == "__main__":     p1 = multiprocessing.Process(name='p1', target=worker)     p2 = multiprocessing.Process(name='p2', target=worker2, daemon=True)     p3 = multiprocessing.Process(name='p3', target=worker2, daemon=True)     p1.start()     p2.start()     p3.start()

运行之后,效果如下:

Python多进程库multiprocessing有什么作用

p2,p3为守护进程,但p1不是所以执行1秒之后,就退出主程序了,也就没有打印p2p3的内容。但是其依旧在执行中,直到执行完成。

join()

同样的,如果你期望强制等待一个守护进程的结束,可以增加join()函数。还是上面的代码,示例如下:

import multiprocessing import time  def worker():     print(multiprocessing.current_process().name, "start")     time.sleep(1)     print(multiprocessing.current_process().name, "end")  def worker2():     print(multiprocessing.current_process().name, "start")     time.sleep(2)     print(multiprocessing.current_process().name, "end")  if __name__ == "__main__":     p1 = multiprocessing.Process(name='p1', target=worker)     p2 = multiprocessing.Process(name='p2', target=worker2, daemon=True)     p3 = multiprocessing.Process(name='p3', target=worker2, daemon=True)     p1.start()     p2.start()     p3.start()     p1.join()     p2.join()     p3.join()

运行之后,和设置进程名的运行结果一样,这里不再展示。唯一与守护进程代码的区别就是最后三行join()函数代码。当然,也可以像线程一样,给join()函数传入一个时间,超过这个时间,主线程不再等待。

强制结束进程

如果一个进程已经挂起或者不小心进入了死锁状态,那么这个时候,我们往往会强制的结束进程。对一个进程对象调用terminate()会结束子进程。示例如下:

import multiprocessing import time  def worker():     print(multiprocessing.current_process().name, "start")     time.sleep(5)     print(multiprocessing.current_process().name, "end")  if __name__ == "__main__":     p1 = multiprocessing.Process(name='p1', target=worker)     p1.start()     print("是否还在运行", p1.is_alive())     p1.terminate()     print("是否还在运行", p1.is_alive())     p1.join()     print("是否还在运行", p1.is_alive())

运行之后,输出如下:

Python多进程库multiprocessing有什么作用

终止进程后要使用join()函数等待进程的退出。使进程管理代码有足够的时间更新对象的状态,以反应进程已经终止。

进程退出状态码

进程退出时,生成的状态码可以通过exitcode属性访问。下表就是其状态码的取值范围以及其意义:

Python多进程库multiprocessing有什么作用

测试如下:

import multiprocessing import time  def worker():     print(multiprocessing.current_process().name, "start")     time.sleep(5)     print(multiprocessing.current_process().name, "end")  if __name__ == "__main__":     p1 = multiprocessing.Process(name='p1', target=worker)     p2 = multiprocessing.Process(name='p2', target=worker)     p1.start()     p2.start()     print("是否还在运行", p1.is_alive())     p1.terminate()     print("是否还在运行", p1.is_alive())     print(p1.exitcode)     p1.join()     print("是否还在运行", p1.is_alive())     print(p1.exitcode)     time.sleep(5.5)     print(p2.exitcode)

运行之后,效果如下:

Python多进程库multiprocessing有什么作用

可以看到,强制退出的进程错误码为负数,正常退出的进程错误码为0。

日志

调试并发问题时,如果能够访问multiprocessing所提供对象的内部状态,那么这会很有用。在实际的项目中,我们可以使用一个方便的模块级函数启用日志记录,它使用logging建立一个日志记录器对象,并增加一个处理器,使日志消息被发送到标准错误通道。

示例如下:

import multiprocessing import logging import sys  def worker():     print("运行工作进程")     sys.stdout.flush()  if __name__ == "__main__":     multiprocessing.log_to_stderr(logging.DEBUG)     p1 = multiprocessing.Process(name='p1', target=worker)     p1.start()     p1.join()

运行之后,效果如下:

Python多进程库multiprocessing有什么作用

派生进程

与线程一样,我们可以自定义进程,而不必只是传入一个函数进行进程的创建。

创建的进程的方式也是派生自进程类即可。示例如下:

import multiprocessing  class WorkerProcess(multiprocessing.Process):     def run(self):         print(self.name)         return  if __name__ == "__main__":     for i in range(5):         p = WorkerProcess()         p.start()         p.join()

运行之后,效果如下:

Python多进程库multiprocessing有什么作用

感谢各位的阅读,以上就是“Python多进程库multiprocessing有什么作用”的内容了,经过本文的学习后,相信大家对Python多进程库multiprocessing有什么作用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Python多进程库multiprocessing有什么作用

本文链接: https://www.lsjlt.com/news/280139.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python多进程库multiprocessing有什么作用
    这篇文章主要讲解了“Python多进程库multiprocessing有什么作用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python多进程库multiprocessing有什么作用”吧...
    99+
    2023-06-15
  • Python多进程multiprocessing包有什么作用
    这篇文章主要讲解了“Python多进程multiprocessing包有什么作用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python多进程multiprocessing包有什么作用”吧...
    99+
    2023-06-02
  • python 包之 multiprocessing 多进程
    目录一、创建一个进程二、创建多个进程三、管道pipe进行进程间通信四、队列Queue进行进程间通信五、进程间同步六、进程间共享数据七、进程池一、创建一个进程 实例化 Process ...
    99+
    2024-04-02
  • Python多进程multiprocessing包有哪些工具
    这篇文章主要介绍“Python多进程multiprocessing包有哪些工具”,在日常操作中,相信很多人在Python多进程multiprocessing包有哪些工具问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家...
    99+
    2023-06-02
  • python多进程multiprocessing的原理和应用
    这篇文章主要介绍“python多进程multiprocessing的原理和应用”,在日常操作中,相信很多人在python多进程multiprocessing的原理和应用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家...
    99+
    2023-06-20
  • Python中multiprocessing的作用是什么
    Python中multiprocessing的作用是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一前言    使用python进行并发处...
    99+
    2023-06-04
  • 如何在python中使用multiprocessing实现多进程并行计算
    如何在python中使用multiprocessing实现多进程并行计算?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。python是什么意思Python是一种跨...
    99+
    2023-06-06
  • python中多进程与多线程有什么区别
    python中多进程与多线程有什么区别?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、lo...
    99+
    2023-06-14
  • windows rdpclip.exe进程有什么作用
    本篇内容介绍了“windows rdpclip.exe进程有什么作用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!rdpclip.exe是什...
    99+
    2023-07-01
  • Python标准库asyncio有什么作用
    这篇文章主要讲解了“Python标准库asyncio有什么作用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python标准库asyncio有什么作用”吧!asyncio 是 Python ...
    99+
    2023-06-02
  • Python多线程和多进程在什么场景中使用
    这篇文章主要介绍“Python多线程和多进程在什么场景中使用”,在日常操作中,相信很多人在Python多线程和多进程在什么场景中使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python多线程和多进程在什...
    99+
    2023-06-16
  • Python多进程怎么应用
    这篇文章主要讲解了“Python多进程怎么应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python多进程怎么应用”吧!并行和串行计算想象一下,你有一个...
    99+
    2024-04-02
  • python多线程多进程的优缺点是什么
    Python多线程和多进程的优缺点如下:多线程的优点:1. 轻量级:线程的创建和上下文切换比进程要快得多,占用的资源也比较少。2. ...
    99+
    2023-05-30
    多线程多进程 多线程 多进程
  • windows中shell infrastructure host进程有什么作用
    这篇文章主要介绍“windows中shell infrastructure host进程有什么作用”,在日常操作中,相信很多人在windows中shell infrastructure host进程有什么作...
    99+
    2023-03-11
    windows
  • python有什么作用
    python 是一种功能强大的高级编程语言,广泛应用于:数据科学和机器学习web 开发自动化和脚本处理人工智能科学计算教育和研究 Python 的强大功能 Python 是一种功能强大...
    99+
    2024-04-20
    python
  • Python中多线程、多进程、协程的区别是什么
    今天就跟大家聊聊有关Python中多线程、多进程、协程的区别是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。首先我们写一个简化的爬虫,对各个功能细分,有意识进行函数式编程。下面代...
    99+
    2023-06-16
  • 使用JML 改进Java程序有什么副作用
    这篇文章主要为大家展示了“使用JML 改进Java程序有什么副作用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“使用JML 改进Java程序有什么副作用”这篇文章吧。副作用回忆一下代码段2中po...
    99+
    2023-06-03
  • Python多进程与多线程的使用场景有哪些
    这篇文章主要介绍Python多进程与多线程的使用场景有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!前言Python多进程适用的场景:计算密集型(CPU密集型)任务Python多线程适用的场景:IO密集型任务计算...
    99+
    2023-06-07
  • Python多进程协作模拟实现流程
    由于python多线程无法发挥多核的作用,因此当计算量很大的时候就需要考虑多进程。 只不过多进程比较麻烦一些,进程中通信向来是一件麻烦事。 python提供了multiprocess...
    99+
    2023-01-17
    Python多进程协作 Python多进程协作模拟
  • PHP中的多进程消费队列有什么用
    小编给大家分享一下PHP中的多进程消费队列有什么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!最近开发一个小功能,用到了队列mcq,启动一个进程消费队列数据,后边发现一个进程处理不过来了,又加了一个进程,过了段时间又处理...
    99+
    2023-06-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作