原文链接:

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多进程(含示例代码)相关推荐

  1. php中的装饰,详解PHP装饰模式的示例代码

    详解PHP装饰模式的示例代码<?php // 装饰模式 function echoLine($msg) { echo $msg, ' '; } class RequestHelper { /** ...

  2. c语言将两个16位变为一个32位,16位汇编第六讲汇编指令详解第第三讲(示例代码)...

    16位汇编第六讲汇编指令详解第第三讲 1.十进制调整指令 1. 十进制数调整指令对二进制运算的结果进行十进制调整,以得到十进制的运算结果 2.分成压缩BCD码和非压缩BCD码调整 简而言之: 以前的时 ...

  3. 详解遗传算法(含MATLAB代码)

    目录 一.遗传算法概述 二.遗传算法的特点和应用 三.遗传算法的基本流程及实现技术 3.1 遗传算法的基本流程 3.2 遗传算法的实现技术 1.编码 2.适应度函数 3.选择算子 4.交叉算子 5.变 ...

  4. python停止线程池_详解python中Threadpool线程池任务终止示例代码

    需求 加入我们需要处理一串个位数(0~9),奇数时需要循环打印它:偶数则等待对应时长并完成所有任务:0则是错误,但不需要终止任务,可以自定义一些处理. 关键点 定义func函数处理需求 callbac ...

  5. 数学建模——智能优化之遗传算法详解Python代码

    数学建模--智能优化之遗传算法详解Python代码 import numpy as np import matplotlib.pyplot as plt from matplotlib import ...

  6. 数学建模——主成分分析算法详解Python代码

    数学建模--主成分分析算法详解Python代码 import matplotlib.pyplot as plt #加载matplotlib用于数据的可视化 from sklearn.decomposi ...

  7. 数学建模——智能优化之模拟退火模型详解Python代码

    数学建模--智能优化之模拟退火模型详解Python代码 #本功能实现最小值的求解#from matplotlib import pyplot as plt import numpy as np imp ...

  8. 数学建模——智能优化之粒子群模型详解Python代码

    数学建模--智能优化之粒子群模型详解Python代码 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplo ...

  9. 数学建模——支持向量机模型详解Python代码

    数学建模--支持向量机模型详解Python代码 from numpy import * import random import matplotlib.pyplot as plt import num ...

  10. 数学建模——一维、二维插值模型详解Python代码

    数学建模--一维.二维插值模型详解Python代码 一.一维插值 # -*-coding:utf-8 -*- import numpy as np from scipy import interpol ...

最新文章

  1. Spring Boot 2.x基础教程:使用集中式缓存Redis
  2. Ubuntu图形界面配置开机自启动
  3. qt当前工程相对路径_QT编程:(6)相对路径问题
  4. python文件处理练习
  5. 河南省第十届省赛 Plumbing the depth of lake (模拟)
  6. openssl java aes_Java AES算法和OpenSSL配对
  7. .NET7的七项重大改进!
  8. 各种资源(持续更新中)
  9. python不能安装怎么办_python3安装不上怎么办
  10. node怎么把token放到redis_从零开始手写 redis(八)朴素 LRU 淘汰算法性能优化
  11. 命令行运行postman
  12. HDOJ水题集合7:记忆化搜索
  13. 订阅个人Blog最新评论的方法
  14. day3--numpy
  15. OpenCV绘制半透明效果的代码
  16. 白盒测试工具―Winams
  17. 这半年说了近乎一辈子的话:关于任正非的小数据分析
  18. base64解密方法
  19. Win10__查看设备管理器中的端口
  20. 爆笑的程序员梗,笑死人不偿命!

热门文章

  1. java 解析xml saxreader_Java中使用DOM和SAX解析XML文件的方法示例
  2. 如何自己去写一个鼠标驱动_方法 - 做手写电子笔记的方法——如何在Windows电脑/平板上做手写笔记(包括非触屏电脑)(MacOS也可以)...
  3. java matcher方法_Java正则表达式入坑指南:正则表达式使用的类有哪些吗?
  4. 合并多个word的代码_word排版技巧:如何快速按顺序合并多个文档
  5. c语言编程下雪,C语言怎么 实现 下雪效果
  6. 三种平摊分析的方法分别为_平摊分析
  7. java重构三部曲,建构·解构·重构——漫谈批注式阅读三部曲
  8. oracle中同义词的用法,Oracle中使用同义词
  9. linux7设置上下文权限,【CONTEXT】自定义CONTEXT(上下文)
  10. VS2015sql本地服务器为空,详解VS2015自带LocalDB数据库用法实例