day35-子进程的开启
#1、异步非阻塞:
import os
from multiprocessing import Process
def func():
print('子进程:',os.getpid()) if __name__ == '__main__':
p = Process(target = func) #创建一个进程对象。
print('主进程:',os.getpid())
p.start() #开启子进程,至于系统什么时候调度,不管它,先执行下面的代码,属于异步。
print('主进程:',os.getpid())
# 主进程: 14112
# 主进程: 14112
# 子进程:12860 #2、同步非阻塞:
import os
from multiprocessing import Process
def func():
print('子进程:',os.getpid()) if __name__ == '__main__': #下面没有创建进程对象,只有一个进程,属于同步。
print('去银行取钱')
func()
print('取完钱了')
# 去银行取钱
# 子进程: 5668
# 取完钱了 #3、异步阻塞:
import os
import time
from multiprocessing import Process:
def func():
print('子进程:',os.getpid()) if __name__ == '__main__':
p = Process(target = func)
print('主进程:',os.getpid())
p.start() #开启子进程
time.sleep(10) #主进程阻塞10秒,跟子进程没关系,不影响子进程,属于异步阻塞。 #4、同步阻塞:
import os
import time
from multiprocessing import Process
def func():
print('子进程:',os.getpid()) if __name__ == '__main__':
print('去银行取钱')
func()
time.sleep(10) #只有一个进程,阻塞10秒,属于同步阻塞。
print('取完钱了') #5、父进程创建子进程:主进程和父进程的pid是一样的,说明它们是同一进程。主进程创建了子进程,也就是父进程创建了子进程。
import os
from multiprocessing import Process
def func():
print('子进程:',os.getpid())
print('父进程:',os.getppid()) if __name__ == '__main__':
p = Process(target = func)
p.start()
print('主进程:',os.getpid())
# 主进程: 16284
# 子进程: 10972
# 父进程: 16284 #6、主进程控制子进程,主进程传参给子进程:
import os
from multiprocessing import Process
def func(money):
print('取%d元'%money) if __name__ == '__main__':
p = Process(target = func,args = (8000000,)) #args是元祖
p.start()
#取8000000元 #7、子进程优先执行,主进程阻塞:
import os
from multiprocessing import Process
def func():
print('子进程',os.getpid()) if __name__ == '__main__':
p = Process(target = func)
p.start()
p.join() #主进程等待子进程结束之后才结束,子进程执行,主进程阻塞在p.join()的位置
print('主进程',os.getpid())
#子进程 23080
#主进程 10912 #8、要求子进程重复三次,主进程最后才执行:
import os
from multiprocessing import Process
def func():
print("子进程",os.getpid()) if __name__ == '__main__':
p = Process(target = func)
p1 = Process(target = func)
p2 = Process(target = func)
p.start()
p1.start()
p2.start()
p.join()
p1.join()
p2.join()
print('主进程',os.getpid())
# 子进程 7436
# 子进程 19988
# 子进程 17712
# 主进程 1464 #9、如果子进程重复很多次,上面代码就很麻烦,要使用for循环解决:
import os
from multiprocessing import Process
def func():
print("子进程",os.getpid()) if __name__ == '__main__':
p_list = []
for i in range(10):
p = Process(target = func)
p.start()
p_list.append(p)
for p in p_list:
p.join()
print('主进程',os.getpid()) #10、多个子进程开始,是无法知道哪个先执行,没有顺序的。但是在p.start()后面加上p.join()可以让当前子进程优先执行,这样就有顺序了。
import os
from multiprocessing import Process
def func(i):
print('序号%d 子进程的pid是%d'%(i,os.getpid())) if __name__ == '__main__':
for i in range(3):
p = Process(target = func,args=(i,))
p.start()
print('主进程',os.getpid())
# 主进程 1976
# 序号0 子进程的pid是17912
# 序号2 子进程的pid是15904
# 序号1 子进程的pid是17612 #11、多进程的特点:数据隔离。子进程之间的数据是隔离的,不共享,他们没有关系,互不影响。
# 在windows下,每创建一个子进程,都会创建一个空间对当前模块(day35-子进程的开启.py)的代码执行一遍,
# 所以每创建一个子进程,n都是等于100。
from multiprocessing import Process
n = 100
def func(i):
global n
n = n - 1
print(i,n) if __name__ == '__main__':
for i in range(3):
p = Process(target=func,args=(i,))
p.start()
# 0 99
# 2 99
# 1 99 #12、使用子类继承父类的方式来开启子进程,并且传参:必须继承Process类和定义run方法。
import os
from multiprocessing import Process
class MyProcess(Process): #必须继承Process类。
def __init__(self,args1,args2,args3):
super().__init__() #子类继承父类__init__方法里面的属性。
self.args1 = args1
self.args2 = args2
self.args3 = args3 def run(self): #必须定义一个run方法。
print('子进程:',os.getpid(),self.args1,self.args2,self.args3)
self.walk() #调用walk方法,walk方法在子进程当中执行。 def walk(self):
print('子进程walk方法',os.getpid()) if __name__ == '__main__':
p = MyProcess(1,2,3)
p.start() #默认调用run方法。
p.walk() #在主进程当中执行。
print('主进程',os.getpid())
# 子进程walk方法 756 #pid跟主进程的一样,证明在主进程当中执行。
# 主进程 756
# 子进程: 15124 1 2 3
# 子进程walk方法 15124 #pid一样,证明walk方法在子进程当中执行。
day35-子进程的开启的更多相关文章
- day 32 子进程的开启 及其用法
开启两种子进程的两种方式# # # 1 传统方式# from multiprocessing import Process# import time# def task(name):# print ( ...
- Python开启进程的2中方式
知识点一:进程的理论 进程:正在进行的一个程序或者说一个任务,而负责执行任务的则是CPU 进程运行的的三种状态: 1.运行:(由CPU来执行,越多越好,可提高效率) 2.阻塞:(遇到了IQ,3个里面可 ...
- python 开启进程两种方法 multiprocessing模块 介绍
一 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu\_count\(\)查看),在python中大部分情况需要使用多进 ...
- python 子进程
1.线程的介绍(理论部分) 1.1 进程线程分工 我们之前讲运行一个py文件,就是开启了一个进程,在内存中开辟一个进程空间,将必要的数据加载到这个进程空间,然后cpu在去调用这个进程的主线程去执行具体 ...
- 进程管理supervisor的简单说明
背景: 项目中遇到有些脚本需要通过后台进程运行,保证不被异常中断,之前都是通过nohup.&.screen来实现,带着能否做一个start/stop/restart/reload的服务启动的想 ...
- Apache prefork 模块指令分析
问题背景: 在一台只有内存的vps上安装directadmin之后经常内存耗,经过查看之后发现Apache成了罪魁祸首急速消耗内存SWAP剩余空间都是0,最终导致内核开始大下杀手,把MySQL都杀了, ...
- php-fpm配置文件详解
第一部分:FPM 配置 参数 | 说明 -p | 命令行中动态修改--prefix ;include=etc/fpm.d/*.conf | 用于包含一个或多个文件,如果glob(3)存在(glob() ...
- 【Python3之多线程】
一.threading模块 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性. 1.开启线程的两种方式(同Process) 方法一 from thr ...
- linux实训
目 录 Unit 1 操作系统安装.... 3 1.1 多操作系统安装... 3 1.1.1 VMware简介... 3 1.1.2 VMWare基本使用... 4 1.2 安装Red Hat Li ...
- multiprocessing.Process() ----------python中的多进程
python 当中 使用封装好的 multiprocessing 为我们实现创建多进程任务. 1 Process()方法创建子进程 使用multiprocessing.Process() 方法产生一个 ...
随机推荐
- 遍历数组提取List[Int]
def toFlatMap(input:List[Any],result:List[Int]):List[Int]=input match{ case h::t=>h match {case e ...
- 给rar文件加个自定义头
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...
- Java线程——线程之间的数据共享
在 Java 传统线程机制中的共享数据方式,大致可以简单分两种情况: ➢ 多个线程行为一致,共同操作一个数据源.也就是每个线程执行的代码相同,可以使用同一个 Runnable 对象,这个 Runn ...
- A - Shortest path of the king (棋盘)
The king is left alone on the chessboard. In spite of this loneliness, he doesn't lose heart, becaus ...
- postman批量接口测试注意事项
1.使用cvs文件 导入文件后最后行出现\r符号 用文本打开 删除最后一行空白行 2.打印cvs文件中的接口调用的参数 Pre-request Script: var beginDate=data.b ...
- MySQL空洞问题解决
原因:Mysql对于BLOB/TEXT值在执行大量删除操作时可能会引起空洞.空洞就是数据虽然删除了,但是依然占用服务器物理空间,会导致性能底下. 解决办法:定期使用OPTIMIZE TABLE进行碎片 ...
- Pytorch学习--编程实战:猫和狗二分类
Pytorch学习系列(一)至(四)均摘自<深度学习框架PyTorch入门与实践>陈云 目录: 1.程序的主要功能 2.文件组织架构 3. 关于`__init__.py` 4.数据处理 5 ...
- APP-计算器
在网课上学习了计算器的制作方法,并自己做了小常识,看完一便后,感觉自己会了,思想也明白了,但是当关掉视频真正开始做的时候会发向许多的问题,自己在前的好多语法用的并不是很熟练,但是反复的查阅资料,观看教 ...
- java this的用法以及原理
/** * this存在方法中,在方法中被调用. * 且是非static方法中被调用.(this 表示这个类的当前实例,而静态方法不依赖于该类的任何实例,随着类产生而装载,因此方法内不能引用 this ...
- udp和tcp通信
一.参考文档 1.从UDP的”连接性”说起–告知你不为人知的UDP 2.Linux UDP通信例子