#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-子进程的开启的更多相关文章

  1. day 32 子进程的开启 及其用法

    开启两种子进程的两种方式# # # 1 传统方式# from multiprocessing import Process# import time# def task(name):# print ( ...

  2. Python开启进程的2中方式

    知识点一:进程的理论 进程:正在进行的一个程序或者说一个任务,而负责执行任务的则是CPU 进程运行的的三种状态: 1.运行:(由CPU来执行,越多越好,可提高效率) 2.阻塞:(遇到了IQ,3个里面可 ...

  3. python 开启进程两种方法 multiprocessing模块 介绍

    一 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu\_count\(\)查看),在python中大部分情况需要使用多进 ...

  4. python 子进程

    1.线程的介绍(理论部分) 1.1 进程线程分工 我们之前讲运行一个py文件,就是开启了一个进程,在内存中开辟一个进程空间,将必要的数据加载到这个进程空间,然后cpu在去调用这个进程的主线程去执行具体 ...

  5. 进程管理supervisor的简单说明

    背景: 项目中遇到有些脚本需要通过后台进程运行,保证不被异常中断,之前都是通过nohup.&.screen来实现,带着能否做一个start/stop/restart/reload的服务启动的想 ...

  6. Apache prefork 模块指令分析

    问题背景: 在一台只有内存的vps上安装directadmin之后经常内存耗,经过查看之后发现Apache成了罪魁祸首急速消耗内存SWAP剩余空间都是0,最终导致内核开始大下杀手,把MySQL都杀了, ...

  7. php-fpm配置文件详解

    第一部分:FPM 配置 参数 | 说明 -p | 命令行中动态修改--prefix ;include=etc/fpm.d/*.conf | 用于包含一个或多个文件,如果glob(3)存在(glob() ...

  8. 【Python3之多线程】

    一.threading模块 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性. 1.开启线程的两种方式(同Process) 方法一 from thr ...

  9. linux实训

    目  录 Unit 1 操作系统安装.... 3 1.1 多操作系统安装... 3 1.1.1 VMware简介... 3 1.1.2 VMWare基本使用... 4 1.2 安装Red Hat Li ...

  10. multiprocessing.Process() ----------python中的多进程

    python 当中 使用封装好的 multiprocessing 为我们实现创建多进程任务. 1 Process()方法创建子进程 使用multiprocessing.Process() 方法产生一个 ...

随机推荐

  1. 遍历数组提取List[Int]

    def toFlatMap(input:List[Any],result:List[Int]):List[Int]=input match{ case h::t=>h match {case e ...

  2. 给rar文件加个自定义头

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  3. Java线程——线程之间的数据共享

      在 Java 传统线程机制中的共享数据方式,大致可以简单分两种情况: ➢ 多个线程行为一致,共同操作一个数据源.也就是每个线程执行的代码相同,可以使用同一个 Runnable 对象,这个 Runn ...

  4. 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 ...

  5. postman批量接口测试注意事项

    1.使用cvs文件 导入文件后最后行出现\r符号 用文本打开 删除最后一行空白行 2.打印cvs文件中的接口调用的参数 Pre-request Script: var beginDate=data.b ...

  6. MySQL空洞问题解决

    原因:Mysql对于BLOB/TEXT值在执行大量删除操作时可能会引起空洞.空洞就是数据虽然删除了,但是依然占用服务器物理空间,会导致性能底下. 解决办法:定期使用OPTIMIZE TABLE进行碎片 ...

  7. Pytorch学习--编程实战:猫和狗二分类

    Pytorch学习系列(一)至(四)均摘自<深度学习框架PyTorch入门与实践>陈云 目录: 1.程序的主要功能 2.文件组织架构 3. 关于`__init__.py` 4.数据处理 5 ...

  8. APP-计算器

    在网课上学习了计算器的制作方法,并自己做了小常识,看完一便后,感觉自己会了,思想也明白了,但是当关掉视频真正开始做的时候会发向许多的问题,自己在前的好多语法用的并不是很熟练,但是反复的查阅资料,观看教 ...

  9. java this的用法以及原理

    /** * this存在方法中,在方法中被调用. * 且是非static方法中被调用.(this 表示这个类的当前实例,而静态方法不依赖于该类的任何实例,随着类产生而装载,因此方法内不能引用 this ...

  10. udp和tcp通信

    一.参考文档 1.从UDP的”连接性”说起–告知你不为人知的UDP 2.Linux UDP通信例子