python_并发编程——多进程
from multiprocessing import Process
import os def func1():
print('子进程1',os.getpid()) #子进程:获取当前进程的进程号
print('子进程的父进程:', os.getppid()) #获取进程的父进程id
def func2():
print('子进程2',os.getpid())
print('子进程的父进程:', os.getppid())
def func3():
print('子进程3',os.getpid())
print('子进程的父进程:', os.getppid()) if __name__ == '__main__':
p1 = Process(target=func1) #注册:将函数名(内存地址)注册进子进程
p2 = Process(target=func2) #p1是一个进程对象
p3 = Process(target=func3)
p1.start() #开启了一个子进程
p2.start() #三个并行的子进程
p3.start()
print('父进程:',os.getpid()) #父进程:获取当前进程的进程号
print('父进程的父进程:', os.getppid()) #获取进程的父进程id
子进程的执行顺序会变化,说明三个子进程是并行的。
传递参数:
from multiprocessing import Process
import os def func1(args): #args接收参数
print('子进程1',os.getpid()) #子进程:获取当前进程的进程号
print('子进程的父进程:', os.getppid()) #获取进程的父进程id
print(args) #打印传递进来的参数 if __name__ == '__main__':
p1 = Process(target=func1,args=('参数',)) #以元组的形式传递参数,如果只传递一个参数必须要加一个逗号
p1.start()
print('父进程:',os.getpid()) #父进程:获取当前进程的进程号
print('父进程的父进程:', os.getppid()) #获取进程的父进程id
结果:
开启多个子进程方法:
from multiprocessing import Process def func1(args):
print('*'*args) if __name__ == '__main__':
# 可以使用for循环实现开启多个子进程
for i in range(1,5):
p1 = Process(target=func1,args=(i,))
p1.start()
结果1:
结果2:
多进程join()方法:
from multiprocessing import Process def func1(args):
print('子进程1')
print(args) if __name__ == '__main__':
p1 = Process(target=func1,args=('参数',))
p1.start()
print('hahahahha')
# 感知一个子进程的结束,将异步变为同步:join之前为异步
p1.join()
# join之后为同步
print('qqqqqqqqq')
结果:
实践:我们想实现先异步输出10句话,最后同步输出执行完毕的结果。
from multiprocessing import Process def func1(args):
print('*'*args) if __name__ == '__main__':
for i in range(10):
p1 = Process(target=func1,args=(i,))
p1.start()
p1.join()
print('执行完毕!')
但是我们发现,
“执行完毕”四个字总是跟随在最长的一句话后面打印输出,然而因为上面10句话是异步的,最长的那句话并不是每次都最后输出,所以我们这样不能现实我们的需求。
from multiprocessing import Process def func1(args):
print('*'*args) if __name__ == '__main__':
p_list = [] #创建一个空列表用来存放等会生产的进程对象
for i in range(10):
p1 = Process(target=func1,args=(i,))
p_list.append(p1)#将每个进程对象依次存放进列表中
p1.start()
[i.join() for i in p_list] # 运用列表推导式:循环列表,依次对列表中的进程对象执行join()方法。之前所有进程必须在这里执行完才能执行下面的代码。
print('执行完毕!')
结果1:
结果2:
python_并发编程——多进程的更多相关文章
- python_并发编程——多进程的第二种启动方式
1.多进程的第二种启动方式 import os from multiprocessing import Process # 创建一个自定义类,继承Process类 class MyProcess(Pr ...
- python并发编程&多进程(二)
前导理论知识见:python并发编程&多进程(一) 一 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_cou ...
- python并发编程&多进程(一)
本篇理论居多,实际操作见: python并发编程&多进程(二) 一 什么是进程 进程:正在进行的一个过程或者说一个任务.而负责执行任务则是cpu. 举例(单核+多道,实现多个进程的并发执行) ...
- Python 3 并发编程多进程之进程同步(锁)
Python 3 并发编程多进程之进程同步(锁) 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的,竞争带来的结果就是错乱,如何控制,就是加锁处理. 1. ...
- Python 3 并发编程多进程之守护进程
Python 3 并发编程多进程之守护进程 主进程创建守护进程 其一:守护进程会在主进程代码执行结束后就终止 其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemo ...
- Python 3 并发编程多进程之队列(推荐使用)
Python 3 并发编程多进程之队列(推荐使用) 进程彼此之间互相隔离,要实现进程间通信(IPC),multiprocessing模块支持两种形式:队列和管道,这两种方式都是使用消息传递的. 可以往 ...
- Python并发编程-多进程
Python并发编程-多进程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.多进程相关概念 由于Python的GIL全局解释器锁存在,多线程未必是CPU密集型程序的好的选择. ...
- python 并发编程 多进程 目录
python multiprocessing模块 介绍 python 开启进程两种方法 python 并发编程 查看进程的id pid与父进程id ppid python 并发编程 多进程 Proce ...
- python 并发编程 多进程 队列目录
python 并发编程 多进程 队列 python 并发编程 多进程 生产者消费者模型介绍 python 并发编程 多进程 生产者消费者模型总结 python 并发编程 多进程 JoinableQue ...
随机推荐
- 神奇 指令 chattr
转自:https://www.cnblogs.com/ftl1012/p/chattr.html 常见命令参数 A:即Atime,告诉系统不要修改对这个文件的最后访问时间. S:即Sync,一旦应用程 ...
- Java开发笔记(一百一十三)HttpClient实现下载与上传
前面介绍了通过HttpClient实现HTTP接口的GET方式调用和POST方式调用,那么文件下载与文件上传又该如何操作呢?其实在HttpClient看来,文件下载属于特殊的GET调用,只不过应答报文 ...
- C++Primer 5th Chap4 Expressions
左值和右值:左值:用的是对象的身份(内存中的位置),右值:用的是对象的值(内容) 解引用与递增(递减)运算符连用: *ivec++:取ivec当前值并向后移动一个元素,等价于*(ivec++),本来+ ...
- DFS解决八皇后问题
2019-07-29 16:49:15 #include <bits/stdc++.h> using namespace std; ][]; int tot; int check(int ...
- PowerBuilder中pbm_keydown()和pbm_dwnkey()的区别:
原地址:https://vcoo.cc/blog/463/ PowerBuilder开发中我们经常会用到快捷键的事件编程,在PB中的键盘事件主要用三个:pbm_dwnkey.pbm_keydown.p ...
- Geoserver 跨域设置
1.下载跨域jar包jetty-servlets.jar(下载geoserver使用的对应jetty版本——可以查看<Geoserver>\lib下jetty-servlet.jar的版本 ...
- Luogu4707 重返现世 min-max容斥、DP
传送门 kthMinMax的唯一模板? 首先你需要知道kth Min-Max定理的内容:\(kthmax(S) = \sum\limits_{T \subseteq S} (-1)^{|T| - k} ...
- 混编用到 C++中数组和vector 复习下大学课本
本文基于邓俊辉编著<数据结构(C++语言版)(第3版)>.<C++ Primer(第5版)>以及网上的相关博文而写,博主水平有限,若有不妥处,欢迎指出. 一.数组 C++中数组 ...
- Qt ListWidget item 发起拖放
第一步:重写类 MyListWidget 继承自 QListWidget 第二步:重写 mousePressEvent 函数 和 mouseMoveEvent 函数 void mousePressEv ...
- Swift 4 中的泛型
作为Swift中最重要的特性之一,泛型使用起来很巧妙.很多人都不太能理解并使用泛型,特别是应用开发者.泛型最适合libraries, frameworks, and SDKs的开发.在这篇文章中,我将 ...