day27_python_1124
1.内容回顾
2.今日内容
3.创建-进程Process
4.join方法
5.进程之间数据隔离
1.内容回顾
# 进程 :是计算机中最小的资源分配单位
# 进程的三状态 :就绪 运行 阻塞
# 并发和并行 :
# 并行 :在一个时刻上,有多个进程在被CPU计算
# 并发 :在一个时间段上,有多个进程在被CPU计算
# 同步异步 :
# 同步 :一件事情与另一件事情有一定的顺序
# 异步 :两件事情可以同时进行
# 阻塞和非阻塞:
# 阻塞 : input sleep recv accept recvfrom
# 非阻塞 :不需要等待就可以直接完成的事情
2.今日内容
# 进程
# 如何去在python代码中 启动一个进程
# 新的模块 :multiprocessing
# 进程模块 :启动进程、基础的进程信息的获取、管理
# 进程的同步
# 进程之间的数据共享
# 进程之间的通信
# 进程池
3.创建-进程Process
import osimport timefrom multiprocessing import Process# print(os.getpid()) #线程id
def func(): time.sleep(1) print('hello',os.getpid())
if __name__ == '__main__': for i in range(10): Process(target=func).start() #开启进程 time.sleep(1) print('hello2',os.getpid())
# 几个概念 :
# 父进程 :父进程执行的过程中创建了子进程
# 子进程 :
# 主进程 :一般我们直接执行的那个程序就是主进程
# 为什么要有if __name__ == '__main__': windows操作系统开启子进程的方式问题
# 如何开启多个子进程 for while
getppid() #显示父进程
def func(): time.sleep(1) print('hello',os.getpid(),os.getppid())
if __name__ == '__main__': for i in range(3): p = Process(target=func) p.start() time.sleep(1) print('hello2',os.getpid())
# 如何给子进程传参数 ?
import timefrom multiprocessing import Process
def func(num,name): print(num,'hello',name)
if __name__ == '__main__': for i in range(10): p = Process(target=func,args=(i,'yuan',)) #(,)不能一个元素 p.start() #非阻塞 print('主进程')
# 子进程可以有返回值么?
# 不能有返回值
# 因为子进程函数中的返回值无法传递给父进程,因为内存隔离的问题
4.join方法
# 主进程会默认等待子进程结束之后才结束# 父进程要负责回收子进程占用的操作系统资源import timefrom multiprocessing import Process
def wahaha(): time.sleep(3) print('in wahaha')
if __name__ == '__main__': Process(target=wahaha()).start() print('主进程')
import timefrom multiprocessing import Process
def send_mail(n): time.sleep(0.5) print('发送邮件%s'%n)
if __name__ == '__main__': l = [] for i in range(10): p = Process(target=send_mail,args=(i,)) l.append(p) p.start() for p in l: p.join() #阻塞到所有子进程执行完 print('所有的邮件都已经发出')
5.进程之间数据隔离
from multiprocessing import Processn = 100def func(): global n n = n - 1if __name__ == '__main__': p_lst = [] for i in range(100): p = Process(target=func) p.start() p_lst.append(p) for p in p_lst: p.join() print(n)
day27_python_1124的更多相关文章
随机推荐
- Vue入门:Vue项目创建及启动
1. 创建Vue项目存放地址 用于存放Vue项目,找个自己处理方便的地方.本人地址:D:\Program Files\Workspace\Vue 2. 创建项目 进入cmd窗口 进入项目存放地址 执行 ...
- LabVIEW中开放隐藏属性的inikey
SuperSecretPrivateSpecialStuff=TRUE 在LabVIEW中有很多属性和方法是隐藏的,在labview安装根目录下的ini中添加该信息能开放这些隐藏的属性和方法.这时候能 ...
- MySQL5.7 并行复制的学习
MySQL 5.6 基于库级别的并行复制 MySQL5.6的并行复制是库(schema)级别的,从库为每个库(schema)分配一个线程以此来提高复制效率 在MySQL 5.6版本之前,Slave服务 ...
- window bat 切换目录并执行php文件
新建一个 test.bat文件,输入一下命令并保存 cmd /k "cd /d D:\PHPWAMP_IN2\phpwamp\server\Nginx-PHPWNMP\htdocs\test ...
- id、class等各种选择器总结
1. id 选择器 # class 选择器 . 标签 选择器 标签名 群组 ...
- docker17.03.2安装
之前安装过docker 卸载 yum -y remove docker docker-common docker-selinux docker-engine docker-engine-selinux ...
- jQuery Gantt Edit:(一)参数以及方法说明
jQuery Gantt editor jQuery Gantt Edit(以下简称GE)是一款开源的基于jQuery的甘特图插件,作者:robicch. GitHub地址:https://githu ...
- Python3学习笔记--迭代器
迭代 使用一个循环来遍历某个东西时这个过程本身叫做迭代. 可迭代对象 python中只要定义了可以返回一个迭代器的__iter__方法,或者定义了可以支持下标索引的__getitem__方法,那么它就 ...
- 钉钉授权第三方WEB网站扫码登录
一.阅读开发文档 首先阅读钉钉官方的开发文档,扫码登录其实用的是官方文档描述的第二种方式,即将钉钉登录二维码内嵌到自己页面中,用户使用钉钉扫码登录第三方网站,网站可以拿到钉钉的用户信息. 二.准备工作 ...
- [转]OpenStreetMap/Google/百度/Bing瓦片地图服务(TMS)
转自:https://blog.csdn.net/youngkingyj/article/details/23365849 开源与成熟商业的瓦片地图服务(TMS 2 WMTS),都有如下共同的特性 ...