第13次预习课-20180919 多进程编程
多进程编程
进程和线程之间的区别
Linux查看:
1)进程: ps –ef
2)跟python相关的进程 ps –ef|grep python
[root@iZ2zejbxp2btn9jh8knipuZ ~]# ps -ef|grep python
root 7717 7665 0 21:05 pts/0 00:00:00 grep python
root 16527 1 0 Aug16 ? 04:01:07 python run.py
Windows:
启动任务管理器-进程
程序不是进程,当程序处于运行状态,才是进程
https://www.cnblogs.com/ChunJian-YANG/p/5506209.html
同步和异步:
顺序执行:同步
不需要按照顺序执行:异步。异步执行快,可以解决效率的问题
什么时候用同步?什么时候用异步?
有依赖关系的时候只能用同步,没有依赖关系的时候,可同步,可异步。(不需要前面步骤的处理结果)
进程:
程序块、数据块、进程控制块三部分组成
进程有3个状态:
就绪态,运行台,等待态
cpu是如何工作的?1台机器1个cpu,1核,运行10个进程
按照时间片执行,不停的上下文切换
内存,硬盘
内存比硬盘快 10-15倍左右,内存的空间比较宝贵
掉电之后,内存的数据不保留,硬盘会保留
内存不够的时候,windows 使用虚拟内存,linux使用交换分区swap,将内存的数据存在磁盘中,从磁盘中取回。
进程至少有一个线程,线程依存于进程内部;
一个进程如果有多个线程,所有的线程会共用这个进程的资源和数据。
进程间如何共享数据?
1)设置全局共享变量;
2)建立通信;
3)数据写入一个文件中。
进程是操作系统分配资源的基本单位
Python使用多进程实现更好的并发。
性能测试:模拟多个进程或者线程,发送大量的请求给服务器端。
Python实现并发的方式:
多进程:用到多核CPU
多线程: 只能用单核CPU,GIL全局解释器锁。并发请求有多IO的时候。
协程:单线程,发现IO等待的时候会跳过去。不用锁。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
Linux 下通过fork生成进程
"""
pid=os.fork()
1.只用在Unix系统中有效,Windows系统中无效
2.fork函数调用一次,返回两次:
在父进程中返回值为子进程id,在子进程中返回值为0
"""
import os
pid=os.fork() #生成一个子进程,出现了2个进程同时开始向下执行
if pid==0:
print("执行子进程,子进程pid={pid},父进程ppid={ppid}".\
format(pid=os.getpid(),ppid=os.getppid()))
else:
print("执行父进程,子进程pid={pid},父进程ppid={ppid}".\
format(pid=pid,ppid=os.getpid()))
-------------------------------------------------------------------------------------------------------------------------------------------------------
理解:
os.fork() 执行的时候会生成子进程,主程序还有一个主进程,此时出了2个进程,一个主进程,一个是子进程
os.fork()规定,主进程自动获取函数返回值是子进程的pid,子进程获取函数返回值是0
主进程:pid=19293
else:
print("执行父进程,子进程pid={pid},父进程ppid={ppid}".\
format(pid=pid,ppid=os.getpid()))
子进程:pid = 0
if pid==0:
print("执行子进程,子进程pid={pid},父进程ppid={ppid}".\
format(pid=os.getpid(),ppid=os.getppid()))
综合起来看,因为2个进程分别执行if和else的代码块,所以最后的结果是,if被子进程执行了一次,else被主进程执行了一次
-------------------------------------------------------------------------------------------------------------------------------------------------------
"""
Process常用属性与方法:
name:进程名
pid:进程id
run(),自定义子类时覆写
start(),开启进程
join(timeout=None),阻塞进程
terminate(),终止进程
is_alive(),判断进程是否存活
"""
import os,time
from multiprocessing import Process
def worker():
print("子进程执行中>>> pid={0},ppid={1}".format(os.getpid(),os.getppid()))
time.sleep(2)
print("子进程终止>>> pid={0}".format(os.getpid()))
def main():
print("主进程执行中>>> pid={0}".format(os.getpid()))
ps=[]
# 创建子进程实例
for i in range(2):
p=Process(target=worker,name="worker"+str(i),args=())
ps.append(p)
# 开启进程
for i in range(2):
ps[i].start()
# 阻塞进程
for i in range(2):
ps[i].join()
print("主进程终止")
if __name__ == '__main__': #当本程序被python执行的时候,执行包含的内容main()
main()
转载于:https://www.cnblogs.com/xuefeifei/p/9758702.html
第13次预习课-20180919 多进程编程相关推荐
- Emojify - v2 吴恩达老师深度学习第五课第二周编程作业2
吴恩达老师深度学习第五课第二周编程作业2,包含答案! Emojify! Welcome to the second assignment of Week 2. You are going to use ...
- 【10.9】multiprocessing多进程编程
1 #!/user/bin/env python 2 # -*- coding:utf-8 -*- 3 4 import os 5 import time 6 # fork只能用于linux/unix ...
- Unix 多进程编程
一.多进程程序的特点 由于UNIX系统是分时多用户系统, CPU按时间片分配给各个用户使用, 而在 实质上应该说CPU按时间片分配给各个进程使用, 每个进程都有自己的运行环境 以使得在CPU做进程切换 ...
- 微课|《Python编程基础与案例集锦(中学版)》第5章例题讲解(1)
适用教材:<Python编程基础与案例集锦(中学版)>,董付国,应根球著,电子工业出版社 京东图书地址:https://item.jd.com/12571990.html 当当图书地址:h ...
- 微课|《Python编程基础与案例集锦(中学版)》第4章例题讲解(3)
适用教材:<Python编程基础与案例集锦(中学版)>,董付国,应根球著,电子工业出版社 例4-10 把十进制数转换为其他进制形式. 例4-11 验证6174猜想. 例4-12.例4- ...
- Python可以这样学(第三季:多线程与多进程编程)-董付国-专题视频课程
Python可以这样学(第三季:多线程与多进程编程)-7527人已学习 课程介绍 董付国老师系列教材<Python程序设计(第2版)>(ISBN:9787302436515 ...
- Python多线程和多进程编程
原文地址:https://tracholar.github.io/wiki/python/python-multiprocessing-tutorial.html 简介 早已进入多核时代的计算机,怎能 ...
- socket多进程编程
socket多进程编程 一.服务器并发访问的问题 服务器按处理方式可以分为迭代服务器和并发服务器两类.平常用C写的简单Socket客户端服务器通信,服务器每次只能处理一个客户的请求,它实现简单但效率很 ...
- python编程图文_深入Python多进程编程基础——图文版
多进程编程知识是Python程序员进阶高级的必备知识点,我们平时习惯了使用multiprocessing库来操纵多进程,但是并不知道它的具体实现原理.下面我对多进程的常用知识点都简单列了一遍,使用原生 ...
最新文章
- 如何使用基于组件的设计方法
- JavaScript-操作DOM对象-更新dom节点
- RHCE 学习笔记(16) - KickStart
- 关于伪静态和真静态的一点心得
- Linux block
- python学习方法总结_Python学习总结(一)
- 小程序 报request:fail invalid url 不校验合法域名已勾选
- element-plus Radio 单选框点击失效 无法切换问题
- 大众点评字体_【网络爬虫实战】解决大众点评搜索页面字体加密
- Java高端培训蚂蚁课堂(每特学院)系列项目实战
- ssh修改端口号_如何查找和更改SSH端口号?
- 【推荐】数据治理资料合集
- android支付后声音,支付宝到账声音生成器
- 测试的阿萨德萨达阿萨德
- LM317,线性稳压电源总结
- WSL2 更换硬盘位置
- html怎么将一张图撑大,div 如何防止图片太大被撑开
- S7-200与配备CU240BE-2的G120变频器进行USS通信的具体方法和步骤
- 【经典算法】:英雄联盟中打字屏蔽系统的实现
- Java资料网盘分享
热门文章
- Stark 组件:快速开发神器 —— 自动生成 URL
- Maximum Profit Aizu - ALDS1_1_D
- 【Linux】一步一步学Linux——runlevel命令(137)
- 【Linux】一步一步学Linux——file命令(37)
- python中match方法返回字符串的长度_Python re模块与正则表达式详解
- cvtcolor python opencv_蔡徐坤教你用OpenCV实现素描效果
- MySQL的用户和授权
- 【汇编语言(第3版)王爽】试验7 寻址方式在接过话数据访问中的应用(代码+注释)
- java date.getyear_为什么Java的Date.getYear()返回111而不是2011?
- 1013 数素数 (20 分)(c语言)