详解python多进程(含示例代码)
原文链接:
multiprocessing Basics - Python Module of the Weekhttps://pymotw.com/2/multiprocessing/basics.html
多处理基础
生成秒的最简单方法是使用目标函数实例化 Process对象并调用start() 使其开始工作。
import multiprocessing def worker (): """worker function""" print 'Worker' return if __name__ == '__main__' : jobs = [] for i in range ( 5 ): p = multiprocessing 。处理(目标=工人)工作。追加( p ) p 。开始()
输出包括打印了五次的“Worker”这个词,尽管根据执行顺序它可能并不完全干净。
$蟒蛇multiprocessing_simple.py工人 ,工人 ,工人 ,工人 ,工人
能够产生一个带有参数的进程来告诉它要做什么通常更有用。与线程不同,要将参数传递给多处理 进程,参数必须能够使用pickle进行序列化。这个例子传递给每个工人一个数字,所以输出更有趣一些。
import multiprocessing def worker ( num ): """thread worker function""" print 'Worker:' , num return if __name__ == '__main__' : jobs = [] for i in range ( 5 ): p = multiprocessing 。处理( target = worker , args = ( i ,))作业。追加( p ) p. 开始()
整数参数现在包含在每个工作人员打印的消息中:
$ python multiprocessing_simpleargs.py工人:0 工人:1 工人:2 工人:3 工人:4
可导入的目标函数
在之间的一个区别线程和多处理 的例子是额外的保护__main__在使用 多处理的例子。由于新进程的启动方式,子进程需要能够导入包含目标函数的脚本。将应用程序的主要部分包装在对__main__的检查中,确保它不会在导入模块时在每个子项中递归运行。另一种方法是从单独的脚本中导入目标函数。
例如,这个主程序:
import multiprocessing import multiprocessing_import_worker if __name__ == '__main__' : jobs = [] for i in range ( 5 ): p = multiprocessing 。处理(目标= multiprocessing_import_worker 。工人)的作业。追加( p ) p 。开始()
使用这个工作函数,定义在一个单独的模块中:
def worker (): """worker function""" print 'Worker' return
并产生与上面第一个示例类似的输出:
$蟒蛇multiprocessing_import_main.py工人 ,工人 ,工人 ,工人 ,工人
确定当前进程
传递参数来标识或命名过程很麻烦,而且没有必要。每个Process实例都有一个带有默认值的名称,可以在创建流程时更改该名称。命名进程对于跟踪它们很有用,尤其是在同时运行多种类型进程的应用程序中。
import multiprocessing import time def worker (): name = multiprocessing . current_process () 。名称打印 名称, “开始”时间。sleep ( 2 )打印 名称, '退出' def my_service (): name = multiprocessing 。current_process () 。名称打印 名称, “开始”时间。睡觉(3 )打印 名称, '退出'如果 __name__ == '__main__' : service = multiprocessing 。Process ( name = 'my_service' , target = my_service ) worker_1 = multiprocessing 。进程( name = 'worker 1' , target = worker ) worker_2 = multiprocessing 。进程(目标=工人) # 使用默认名称worker_1 。开始() worker_2 。启动()服务。开始()
调试输出的每一行都包含当前进程的名称。名称列中带有Process-3的行对应于未命名的进程worker_1。
$ python multiprocessing_names.py worker 1 启动 worker 1 退出 进程3 启动 进程3 退出 my_service 启动 my_service 退出
守护进程
默认情况下,直到所有子程序都退出后,主程序才会退出。有时启动后台进程运行时不会阻止主程序退出是很有用的,例如在可能没有简单方法中断工作程序的服务中,或者在工作过程中让它死掉不会丢失或损坏数据(例如,为服务监控工具生成“心跳”的任务)。
要将进程标记为守护进程,请使用布尔值设置其守护进程属性。默认情况下,进程不是守护进程,因此传递 True 会打开守护进程模式。
import multiprocessing import time import sys def daemon (): p = multiprocessing . current_process ()打印 'Starting:' , p 。姓名, 页码。pid系统。标准输出。冲洗()时间。sleep ( 2 )打印 'Exiting:' , p 。姓名, 页码。pid系统。标准输出。flush () def non_daemon (): p = multiprocessing 。current_process ()打印 'Starting:' , p 。姓名, 页码。pid系统。标准输出。flush ()打印 'Exiting :' , p 。姓名, 页码。pid系统。标准输出。flush () if __name__ == '__main__' : d = multiprocessing. 进程( name = 'daemon' , target = daemon ) d . 守护进程 = 真n = 多处理。进程( name = 'non-daemon' , target = non_daemon ) n 。守护进程 = 假d . 开始()时间。睡眠( 1 ) n 。开始()
详解python多进程(含示例代码)相关推荐
- php中的装饰,详解PHP装饰模式的示例代码
详解PHP装饰模式的示例代码<?php // 装饰模式 function echoLine($msg) { echo $msg, ' '; } class RequestHelper { /** ...
- c语言将两个16位变为一个32位,16位汇编第六讲汇编指令详解第第三讲(示例代码)...
16位汇编第六讲汇编指令详解第第三讲 1.十进制调整指令 1. 十进制数调整指令对二进制运算的结果进行十进制调整,以得到十进制的运算结果 2.分成压缩BCD码和非压缩BCD码调整 简而言之: 以前的时 ...
- 详解遗传算法(含MATLAB代码)
目录 一.遗传算法概述 二.遗传算法的特点和应用 三.遗传算法的基本流程及实现技术 3.1 遗传算法的基本流程 3.2 遗传算法的实现技术 1.编码 2.适应度函数 3.选择算子 4.交叉算子 5.变 ...
- python停止线程池_详解python中Threadpool线程池任务终止示例代码
需求 加入我们需要处理一串个位数(0~9),奇数时需要循环打印它:偶数则等待对应时长并完成所有任务:0则是错误,但不需要终止任务,可以自定义一些处理. 关键点 定义func函数处理需求 callbac ...
- 数学建模——智能优化之遗传算法详解Python代码
数学建模--智能优化之遗传算法详解Python代码 import numpy as np import matplotlib.pyplot as plt from matplotlib import ...
- 数学建模——主成分分析算法详解Python代码
数学建模--主成分分析算法详解Python代码 import matplotlib.pyplot as plt #加载matplotlib用于数据的可视化 from sklearn.decomposi ...
- 数学建模——智能优化之模拟退火模型详解Python代码
数学建模--智能优化之模拟退火模型详解Python代码 #本功能实现最小值的求解#from matplotlib import pyplot as plt import numpy as np imp ...
- 数学建模——智能优化之粒子群模型详解Python代码
数学建模--智能优化之粒子群模型详解Python代码 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplo ...
- 数学建模——支持向量机模型详解Python代码
数学建模--支持向量机模型详解Python代码 from numpy import * import random import matplotlib.pyplot as plt import num ...
- 数学建模——一维、二维插值模型详解Python代码
数学建模--一维.二维插值模型详解Python代码 一.一维插值 # -*-coding:utf-8 -*- import numpy as np from scipy import interpol ...
最新文章
- Spring Boot 2.x基础教程:使用集中式缓存Redis
- Ubuntu图形界面配置开机自启动
- qt当前工程相对路径_QT编程:(6)相对路径问题
- python文件处理练习
- 河南省第十届省赛 Plumbing the depth of lake (模拟)
- openssl java aes_Java AES算法和OpenSSL配对
- .NET7的七项重大改进!
- 各种资源(持续更新中)
- python不能安装怎么办_python3安装不上怎么办
- node怎么把token放到redis_从零开始手写 redis(八)朴素 LRU 淘汰算法性能优化
- 命令行运行postman
- HDOJ水题集合7:记忆化搜索
- 订阅个人Blog最新评论的方法
- day3--numpy
- OpenCV绘制半透明效果的代码
- 白盒测试工具―Winams
- 这半年说了近乎一辈子的话:关于任正非的小数据分析
- base64解密方法
- Win10__查看设备管理器中的端口
- 爆笑的程序员梗,笑死人不偿命!
热门文章
- java 解析xml saxreader_Java中使用DOM和SAX解析XML文件的方法示例
- 如何自己去写一个鼠标驱动_方法 - 做手写电子笔记的方法——如何在Windows电脑/平板上做手写笔记(包括非触屏电脑)(MacOS也可以)...
- java matcher方法_Java正则表达式入坑指南:正则表达式使用的类有哪些吗?
- 合并多个word的代码_word排版技巧:如何快速按顺序合并多个文档
- c语言编程下雪,C语言怎么 实现 下雪效果
- 三种平摊分析的方法分别为_平摊分析
- java重构三部曲,建构·解构·重构——漫谈批注式阅读三部曲
- oracle中同义词的用法,Oracle中使用同义词
- linux7设置上下文权限,【CONTEXT】自定义CONTEXT(上下文)
- VS2015sql本地服务器为空,详解VS2015自带LocalDB数据库用法实例