2019独角兽企业重金招聘Python工程师标准>>>

一:多进程

import os
import time
from multiprocessing import Process
def func(args,args2):
    print(args,args2)#打印参数
    time.sleep(3)print('子进程 :', os.getpid())  #查看子进程进程号
    print('子进程的父进程 :', os.getppid())#查看子进程的父进程,多了一个p
    print(12345)if __name__ == '__main__':
    p = Process(target=func,args=('参数','参数2'))   # 注册
    # p是一个进程对象,还没有启动进程
    p.start()       # 开启了一个子进程
    print('*'*10)print('父进程 :',os.getpid()) # 查看当前进程的进程号
    print('父进程的父进程 :',os.getppid()) # 查看当前进程的父进程

# 进程的生命周期
    # 主进程
    # 子进程
    # 开启了子进程的主进程 :
        # 主进程自己的代码如果长,等待自己的代码执行结束,
        # 子进程的执行时间长,主进程会在主进程代码执行完毕之后等待子进程执行完毕之后 主进程才结束

打印结果: 先打印主进程,然后打印子进程。主进程结束执行子进程。

**********
父进程 : 3832
父进程的父进程 : 2556
参数 参数2
子进程 : 5416
子进程的父进程 : 3832
12345

二:多进程的中的几个方法(多进程即可指子进程,父进程这两个进程,也可指多个实例化两个进程)

import time
from multiprocessing import Processdef func(arg1,arg2):
    print('*'*arg1)time.sleep(5)print('*'*arg2)if __name__ == '__main__':
    p = Process(target=func,args=(10,20))p.start()print('hahahaha')# p.join()     # 是感知一个子进程的结束,将异步的程序改为同步
    print('====== : 运行完了')

这样就是正常打印,主进程执行完毕执行子进程

hahahaha
====== : 运行完了
**********
********************

如果加上join之后,是感知一个子进程的结束,将异步的程序改为同步。也就是等待子进程结束后主进程关闭

打印结果:

hahahaha
**********
********************
====== : 运行完了

如果子进程是一个while循环的死循环,那么主进程就一直不会关闭。

import os
import time
from multiprocessing import Processdef func():
    while True:
        print('子进程开始')time.sleep(1)print('***我还在运行')if __name__ == '__main__':
    p = Process(target=func)p.daemon = True
    p.start()p.join()print('程序结束')

打印结果:

子进程开始
***我还在运行
子进程开始
***我还在运行

总是在子进程这里循环

小总结:

process小知识:

Process([group [, target [, name [, args [, kwargs]]]]]),由该类实例化得到的对象,
表示一个子进程中的任务(尚未启动)强调:
1. 需要使用关键字的方式来指定参数
2. args指定的为传给target函数的位置参数,是一个元组形式,必须有逗号参数介绍:
1 group参数未使用,值始终为None
2 target表示调用对象,即子进程要执行的任务
3 args表示调用对象的位置参数元组,args=(1,2,'egon',)
4 kwargs表示调用对象的字典,kwargs={'name':'egon','age':18}
5 name为子进程的名称

进程常见关键字

1 p.start():启动进程,并调用该子进程中的p.run()
2 p.run():进程启动时运行的方法,正是它去调用target指定的函数,我们自定义类的类中一定要实现该方法
3 p.terminate():强制终止进程p,不会进行任何清理操作,如果p创建了子进程,该子进程就成了僵尸进程,
使用该方法需要特别小心这种情况。如果p还保存了一个锁那么也将不会被释放,进而导致死锁
4 p.is_alive():如果p仍然运行,返回True
5 p.join([timeout]):主线程等待p终止(强调:是主线程处于等的状态,而p是处于运行的状态)。
timeout是可选的超时时间,需要强调的是,p.join只能join住start开启的进程,而不能join住run开启的进程

开启多个子进程

import os
import time
from multiprocessing import Processdef func(filename,content):
    with open(filename,'w') as f:
        f.write(content*10*'*')if __name__ == '__main__':
    p_lst = []for i in range(10):
        p = Process(target=func,args=('info%s'%i,i))p_lst.append(p)p.start()for p in p_lst:p.join()   # 之前的所有进程必须在这里都执行完才能执行下面的代码
    print([i for i in os.walk(r'F:\python10期\day37\day37')])# 同步 0.1 * 500  = 50
# 异步 500 0.1    = 0.1
# 多进程写文件
# 首先往文件夹中写文件
# 向用户展示写入文件之后文件夹中所有的文件名

解析:他会在所有进程结束之后才能完成下面的print。

开启多个子进程的第二种方式:

import os
from multiprocessing import Processclass MyProcess(Process):
    def __init__(self,arg1,arg2):
        super().__init__()self.arg1 = arg1
        self.arg2 = arg2

    def run(self):
        print(self.pid)print(self.name)print(self.arg1)print(self.arg2)if __name__ == '__main__':
    p1 = MyProcess(1,2)p1.start()p2 = MyProcess(3,4)p2.start()# 自定义类 继承Process类
# 必须实现一个run方法,run方法中是在子进程中执行的代码

这种方式需要第一定义一个类,让他继承process,第二种是传参,需要初始化,然后是定义一个run方法,因为定义run方法之后才能执行start,然后在实例化二个对象。分别执行。

打印结果:

6356
MyProcess-1
1
2
3136
MyProcess-2
3
4

因为此进程是异步,所以process1和process2不确定谁最先打印,随机。super是执行process所有方法。

转载于:https://my.oschina.net/u/3657436/blog/1785129

多进程,守护进程,锁相关推荐

  1. Python并发编程:多进程-守护进程

    一 守护进程 主进程创建子进程,然后将该进程设置成守护自己的进程,守护进程就好比皇帝身边的老太监,皇帝已死老太监就跟着殉葬了. 关于守护进程需要强调两点: 其一:守护进程会在主进程代码执行结束后就终止 ...

  2. Python多进程与进程锁的基本使用

    Python的multiprocessing模块提供了多种进程间通信的方式,如Queue.Pipe等. Queue是multiprocessing提供的一个模块,它的数据结构就是"FIFO- ...

  3. 《UNIX环境高级编程》笔记 第十三章-守护进程

    1. 概念 守护进程(daemon)是生存期长的一种进程.它们常常在系统引导装入时启动,仅在系统关闭时才终止.因为它们没有控制终端,所以说它们是在后台运行的. Linux的大多数服务就是用守护进程实现 ...

  4. Python 多进程笔记 — 启动进程的方式、守护进程、进程间通信、进程池、进程池之间通信、多进程生产消费模型

    1 面向过程启动多进程 Python 操作进程的类都定义在 multiprocessing 模块,该模块提供了一个 Process 类来代表一个进程对象,这个对象可以理解为是一个独立的进程,可以执行另 ...

  5. python互斥锁原理_python并发编程之多进程1------互斥锁与进程间的通信

    一.互斥锁 进程之间数据隔离,但是共享一套文件系统,因而可以通过文件来实现进程直接的通信,但问题是必须自己加锁处理. 注意:加锁的目的是为了保证多个进程修改同一块数据时,同一时间只能有一个修改,即串行 ...

  6. python并发编程之semaphore(信号量)_python 之 并发编程(守护进程、互斥锁、IPC通信机制)...

    9.5 守护进程 主进程创建守护进程 其一:守护进程会在主进程代码执行结束后就立即终止 其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic process ...

  7. python 进程间同步_python之路29 -- 多进程与进程同步(进程锁、信号量、事件)与进程间的通讯(队列和管道、生产者与消费者模型)与进程池...

    所谓异步是不需要等待被依赖的任务完成,只是通知被依赖的任务要完成什么工作,依赖的任务也立即执行,只要自己完成了整个任务就算完成了.至于被依赖的任务最终是否真正完成,依赖它的任务无法确定,所以它是不可靠 ...

  8. python守护进程去中断子进程_04 Python并发编程(守护进程,进程锁,进程队列)

    进程的其他方法 P = Process(target=f,) P.Pid 查看进程号  查看进程的名字p.name P.is_alive()  返回一个true或者False P.terminate( ...

  9. python并发编程之进程1(守护进程,进程锁,进程队列)

    进程的其他方法 P = Process(target=f,) P.Pid 查看进程号  查看进程的名字p.name P.is_alive()  返回一个true或者False P.terminate( ...

  10. 并发 --- 31 进程锁 守护进程 进程队列

    一.进程的其他方法 1.   .name      进程名   (可指定) 2.  .pid     进程号 3.   os.getpid         在什么位置就是什么的进程号 4.   .is ...

最新文章

  1. 【数据竞赛】“达观杯”文本智能处理挑战赛4
  2. Qt for Python Mac下使用 fbs 打包软件
  3. 阿里云yum源安装SVN失败的问题
  4. 解析Infopath生成的XSN结构
  5. matlab中批量tiff转png,图片(jpg,png,tif等)批量转dicom(dcm)格式
  6. 机器人煮面机创始人_那个火爆的煮面机器人搬走了!一大波机器人“入侵”,无人餐厅只是玩噱头?...
  7. python mysql捕获异常_python mysql无法捕获异常
  8. android wifi列表轮询,(八十八)Android O WiFi启动流程梳理续——connectToSupplicant
  9. redis之数据操作详解
  10. macOS safari安装第三方插件
  11. 小米商城前端页面(静态)
  12. 【零基础-1】PaddlePaddle学习Bert
  13. 方正证券:新一代认证核心系统换代升级,坚持实践金融科技全栈自主可控
  14. idea鼠标放大字体设置
  15. Windows系统被faust勒索病毒攻击勒索病毒解密服务器与数据库解密恢复
  16. python使用turtle库绘制一个100长度的十字架_使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例...
  17. 【笔记】概统论与数理统计第七章知识点总结
  18. Linux(ubuntu) 基础
  19. 任意长度的python列表_任意长度的Python列表、元组和字符串中最后一个元素的索引为...
  20. 视频教程-【无废话课程】Maya软件初级教学UV拆分基础入门【字幕版】-Maya

热门文章

  1. 【译】使用 CocoaPods 模块化iOS应用
  2. 今天中国获得金牌数量是7块,位居奖牌榜首位
  3. position:absolute的小坑
  4. python split()函数
  5. Win8 开发者训练营第一天的过程,感受和收获 :D
  6. 组件注册@ComponentScan的自动扫描和指定扫描规则
  7. 9.Springcloud的Hystrix服务熔断和服务降级
  8. mysql增删改查不区分大小写吗_MySQL的增删改查语句以及数据库设计的三大范式...
  9. cad插入块_CAD中的quot;块quot;能否修改?能!一个命令可快速解决
  10. ggplot2 | 图例(Ⅰ):图例函数、主题函数中的图例参数