#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. hook鼠标

    library dllMouse; uses SysUtils, Classes, UnitHookDLL in 'UnitHookDLL.pas', UnitHookConst in 'UnitHo ...

  2. A4纸网页打印

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. hdu1232 城镇间修路(并查集)

    问题是这样的: Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇 ...

  4. 吴裕雄--天生自然MySQL学习笔记:MySQL 处理重复数据

    有些 MySQL 数据表中可能存在重复的记录,有些情况允许重复数据的存在,但有时候我们也需要删除这些重复的数据. 防止表中出现重复数据 可以在 MySQL 数据表中设置指定的字段为 PRIMARY K ...

  5. one_day_one_linuxCmd---netstat命令

    <坚持每天学习一个 linux 命令,今天我们来学习 netstat 命令> 前言:netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态等,还可以很方便查看本地机器上 ...

  6. PAT Advanced 1053 Path of Equal Weight (30) [树的遍历]

    题目 Given a non-empty tree with root R, and with weight Wi assigned to each tree node Ti. The weight ...

  7. Numa解释

    原路径:http://www.sohu.com/a/126402403_609500 内容概要 今天的文章我们将简单学习下Hyper-V如何通过NUMA(Non-Uniform Memory Acce ...

  8. 自动生成返回Json数据的toString()方法

    平时书写实体类方法的时候,想要获取的值直接返回Json字符串,以便使用,可以直接在Eclipse里面生成. 实现步骤: 1.快捷键Alt+S 2.选择Edit 3.添加字段,名称随意(我的为JsonS ...

  9. Linux(CENTOS7) Nginx负载均衡简单配置

    负载均衡的作用 1.转发功能 按照一定的算法[权重.轮询],将客户端请求转发到不同应用服务器上,减轻单个服务器压力,提高系统并发量. 2.故障移除 通过心跳检测的方式,判断应用服务器当前是否可以正常工 ...

  10. 编程作业1.1——sklearn机器学习算法系列之LinearRegression线性回归

    知识点 scikit-learn 对于线性回归提供了比较多的类库,这些类库都可以用来做线性回归分析. 我们也可以使用scikit-learn的线性回归函数,而不是从头开始实现这些算法. 我们将scik ...