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() 方法产生一个 ...
随机推荐
- 高性能集群软件keepalived
Keepalived介绍 以下是keepalive官网上的介绍.官方站点为http://www.keepalived.org. Keepalived is a routing sof ...
- dd if= of= MBR
1.备份分区表信息 sudo fdisk -l >hda.txt #分区表信息重定向输出到文件中 2.备份MBR sudo dd if=/dev/sda of=mbr bs=512 count ...
- 79.常用的返回QuerySet对象的方法使用详解: filter, exclude,annotate
返回新的QuerySet的常用方法: 1.filter: 将满足条件的数据提取出来,返回一个新的QuerySet 以下所使用的模型article,category,定义模型models.py文件中,示 ...
- 对比Node.js和Python 帮你确定理想编程解决方案!
世上没有最好的编程语言.有些编程语言比其他编程语言用于更具体的事情.比如,你可能需要移动应用程序,网络应用程序或更专业化的系统,则可能会有特定的语言.但是我们暂时假设你需要的是一个相对来说比较简单的网 ...
- UVA 12657/COJ 1329 HN第九届省赛 链表模拟
因为最近学了Splay,刚看到这个题目总共四种操作,把某个数移到另一个数的左边 或者右边 交换两个数 翻转整个序列,马上想到用Splay,因为总点数和总操作数都为10^5,如果用Splay把操作优化到 ...
- idea拉取git项目并创建为maven项目(新创建github项目)
0 环境 系统环境:win10 编辑器:idea 1 正文 1 clone项目 跟着提示yes 下一步 2 在根节点添加pom.xml(maven) <?xml version="1. ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL 正则表达式
下表中的正则模式可应用于 REGEXP 操作符中. 实例 查找name字段中以'st'为开头的所有数据: mysql> SELECT name FROM person_tbl WHERE nam ...
- linux下ffmpeg环境搭建记录
1.Linux下安装yasm 官网下载:http://yasm.tortall.net/Download.html tar -zvxf yasm-1.3.0.tar.gz cd yasm-1.3.0/ ...
- JAVA 算法练习(三)
拆解排序问题 后缀子串排序 题目: 对于一个字符串,将其后缀子串进行排序,例如grain 其子串有: grain rain ain in n 然后对各子串按字典顺序排序,即: ain,grain,in ...
- Python说文解字_半成品再加工
1. 其实在编写代码的时候,根据需求和程序员的喜好,对现有类中的属性和方法进行二次加工,原先所给与的属性和方法贴合自己想要的需求.这就是我们常说的“重写”和二次封装. 2. 比如我们对现有的库list ...