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的更多相关文章
随机推荐
- react中对于context的理解
一.context旧版的基本使用 1.context的理解 当不想在组件树中通过逐层传递props或state的方式来传递数据时,可使用context来实现跨层级的组件数据传递. 2.context的 ...
- PHP环境配置遇到的小问题
1.设置时区 2.默认打开文件 3.文件夹权限设置
- 第十六节 BOM基础
打开.关闭窗口 open:蓝色理想运行代码功能 <button onclick="window.open('http://www.baidu.com')">打开窗口&l ...
- APP压力测试 monkey(新猿旺学习总结)
安卓APP做压力测试 需要配置JDK(Java)和 配置SDK 遮掩才能使用adb命令连接手机进行模拟动作事件进行压力测试 配置 K JDK 与 K SDK 环境 a java 与 与 sdk 用于 ...
- python学习之文本文件上传
最近用python的flask框架完成了一个最基本的文本文件上传,然后读取. 前端用的Angular的ng2-file-upload完成文件上传,后端用flask接收上传的文件,接着做处理. 在交互的 ...
- php,js 对字符串按位异或运算加密解密
异或的符号是^.按位异或运算, 对等长二进制模式按位或二进制数的每一位执行逻辑按位异或操作. 操作的结果是如果某位不同则该位为1, 否则该位为0. xor运算的逆运算是它本身,也就是说两次异或同一个数 ...
- 【题解】Luogu P4097 [HEOI2013]Segment
原题传送门 这珂以说是李超线段树的模板题 按着题意写就行了,时间复杂度为\(O(n\log^2n)\) #include <bits/stdc++.h> #define N 40005 # ...
- linux普通帐号可以临时切换到root(添加用户到sudoers中)
一般,进入terminal之后,默认是普通账户能操作的功能,能访问的目录有限,需要临时切换到root账户 那么此时就需要配置sudoers文件,可以让普通用户通过sudo命令临时切换到root账户 首 ...
- BZOJ1688|二进制枚举子集| 状态压缩DP
Disease Manangement 疾病管理 Description Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D) ...
- 20175312 2018-2019-2 《Java程序设计》第8周学习总结
20175312 2018-2019-2 <Java程序设计>第8周学习总结 教材学习内容总结 已依照蓝墨云班课的要求完成了第十章的学习,主要的学习渠道是PPT,和书的课后习题. 总结如下 ...