多进程编程

进程和线程之间的区别

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 多进程编程相关推荐

  1. Emojify - v2 吴恩达老师深度学习第五课第二周编程作业2

    吴恩达老师深度学习第五课第二周编程作业2,包含答案! Emojify! Welcome to the second assignment of Week 2. You are going to use ...

  2. 【10.9】multiprocessing多进程编程

    1 #!/user/bin/env python 2 # -*- coding:utf-8 -*- 3 4 import os 5 import time 6 # fork只能用于linux/unix ...

  3. Unix 多进程编程

    一.多进程程序的特点 由于UNIX系统是分时多用户系统, CPU按时间片分配给各个用户使用, 而在 实质上应该说CPU按时间片分配给各个进程使用, 每个进程都有自己的运行环境 以使得在CPU做进程切换 ...

  4. 微课|《Python编程基础与案例集锦(中学版)》第5章例题讲解(1)

    适用教材:<Python编程基础与案例集锦(中学版)>,董付国,应根球著,电子工业出版社 京东图书地址:https://item.jd.com/12571990.html 当当图书地址:h ...

  5. 微课|《Python编程基础与案例集锦(中学版)》第4章例题讲解(3)

    适用教材:<Python编程基础与案例集锦(中学版)>,董付国,应根球著,电子工业出版社 例4-10  把十进制数转换为其他进制形式. 例4-11  验证6174猜想. 例4-12.例4- ...

  6. Python可以这样学(第三季:多线程与多进程编程)-董付国-专题视频课程

    Python可以这样学(第三季:多线程与多进程编程)-7527人已学习 课程介绍         董付国老师系列教材<Python程序设计(第2版)>(ISBN:9787302436515 ...

  7. Python多线程和多进程编程

    原文地址:https://tracholar.github.io/wiki/python/python-multiprocessing-tutorial.html 简介 早已进入多核时代的计算机,怎能 ...

  8. socket多进程编程

    socket多进程编程 一.服务器并发访问的问题 服务器按处理方式可以分为迭代服务器和并发服务器两类.平常用C写的简单Socket客户端服务器通信,服务器每次只能处理一个客户的请求,它实现简单但效率很 ...

  9. python编程图文_深入Python多进程编程基础——图文版

    多进程编程知识是Python程序员进阶高级的必备知识点,我们平时习惯了使用multiprocessing库来操纵多进程,但是并不知道它的具体实现原理.下面我对多进程的常用知识点都简单列了一遍,使用原生 ...

最新文章

  1. 如何使用基于组件的设计方法
  2. JavaScript-操作DOM对象-更新dom节点
  3. RHCE 学习笔记(16) - KickStart
  4. 关于伪静态和真静态的一点心得
  5. Linux block
  6. python学习方法总结_Python学习总结(一)
  7. 小程序 报request:fail invalid url 不校验合法域名已勾选
  8. element-plus Radio 单选框点击失效 无法切换问题
  9. 大众点评字体_【网络爬虫实战】解决大众点评搜索页面字体加密
  10. Java高端培训蚂蚁课堂(每特学院)系列项目实战
  11. ssh修改端口号_如何查找和更改SSH端口号?
  12. 【推荐】数据治理资料合集
  13. android支付后声音,支付宝到账声音生成器
  14. 测试的阿萨德萨达阿萨德
  15. LM317,线性稳压电源总结
  16. WSL2 更换硬盘位置
  17. html怎么将一张图撑大,div 如何防止图片太大被撑开
  18. S7-200与配备CU240BE-2的G120变频器进行USS通信的具体方法和步骤
  19. 【经典算法】:英雄联盟中打字屏蔽系统的实现
  20. Java资料网盘分享

热门文章

  1. Stark 组件:快速开发神器 —— 自动生成 URL
  2. Maximum Profit Aizu - ALDS1_1_D
  3. 【Linux】一步一步学Linux——runlevel命令(137)
  4. 【Linux】一步一步学Linux——file命令(37)
  5. python中match方法返回字符串的长度_Python re模块与正则表达式详解
  6. cvtcolor python opencv_蔡徐坤教你用OpenCV实现素描效果
  7. MySQL的用户和授权
  8. 【汇编语言(第3版)王爽】试验7 寻址方式在接过话数据访问中的应用(代码+注释)
  9. java date.getyear_为什么Java的Date.getYear()返回111而不是2011?
  10. 1013 数素数 (20 分)(c语言)