1.进程

什么是进程:

  一个正在被运行的程序就称之为进程,是程序具体执行的过程,是一种抽象概念,进程来自操作系统

2.多进程

 多个正在运行的程序

在python中实现多线程的方法

  1. from multiprocessing import Process
  2. import os
  3. import time
  4.  
  5. # 当出现一些耗时时间比较长的操作时,会导致程序进入阻塞状态,无法执行其他代码
  6. # 这个时候就可以开启子进程把任务交给他
  7.  
  8. def task(name):
  9. print('name%s子进程开始!'% name)
  10. print('name%s子进程结束!'% name)
  11.  
  12. if __name__ == '__main__':
  13. p = Process(target=task,args=('大哥',))
  14.  
  15. # 开启子进程,本质是向操作系统发送请求,让它启动进程,通常不可能立即开启
  16. p.start()
  17. p.join()
  18. print('父进程结束')
  19.  
  20. '''
  21. PS:windows 和 linux 开启进程的方式不同
  22. 相同之处:都是需要将数据copy一份给子进程,这样 子进程才知道要干什么
  23. linux 会将父进程的所有数据 完全copy,然后拿到父进程,知道代码的位置,继续执行
  24. windows 会copy 一部分数据 同时会导入py文件来执行,这样一来就会递归开启进程
  25. 所以windows中开启子进程都需要开启判断
  26.  
  27. 不过都建议加上判断,可以保证两个平台都可以使用
  28.  
  29. 记住:
  30. 开启进程的代码,都把它放到 if __name__ == '__main__': 中即可
  31. '''

自定义开启子进程:

3.进程与程序的区别

程序就是一堆计算机可以识别文件,程序在没有被运行就是躺在硬盘上的一堆二进制

运行程序时,要从硬盘读取数据到内存中,CPU从内存读取指令并执行 ,

一旦运行就产生了进程

一个程序可以多次执行 产生多个进程,但是进程之间相互独立

当我们右键运行了一个py文件时 ,其实启动的是python解释器,你的py文件其实是当作参数传给了解释器

4.程序运行的三种状态

1. 阻塞与非阻塞

  阻塞:当程序遇到IO操作(输入输出)时,就进入了阻塞状态

  非阻塞:程序正常运行种,没有遇到任何IO操作,就处于非阻塞状态

阻塞与非阻塞说的是程序运行状态

2.并发

  同一时间段,有多个程序都处于运行状态,但一个时间点只有一个程序被CUP处理,本质上切换执行,切换的同时,保存上一个任务的操作

3.并行

  同一时间段,多个任务同时被CUP处理

并发与并行说的是任务的处理方式

    PS:关于程序员永恒的话题  

      提高效率

      根本方法就是让程序尽可能处于运行状态

      减少IO 尽可能多占用CPU时间

      缓冲区就是用于减少IO操作的

5.multiprocessing模块的使用(Process常用方法,join函数,)

#  Process其他使用方法

  1. from multiprocessing import Process
  2. def task():
  3. print('')
  4. exit(100) # 退出码
  5.  
  6. if __name__ == '__main__':
  7. p = Process(target=task,name='李果')
  8. p.start() # 此处名为懒加载优化机制,如果没有调用start ,那么该对象将不会被创建
  9. p.join() # 等待子进程结束
  10. p.terminate() # 终止进程
  11. print(p.is_alive()) # 判断进程是否存活
  12. print(p.pid) # 查看PID
  13. print(p.exitcode) # 获取退出码
  1. import time
  2. from multiprocessing import Process
  3.  
  4. def stak(i):
  5. print('买烟去了')
  6. time.sleep(i)
  7. print('%s 买完了!'% i)
  8.  
  9. if __name__ == '__main__':
  10. strat_time = time.time()
  11. p1 = Process(target=stak,args=(1,))
  12. p2 = Process(target=stak,args=(2,))
  13. p3 = Process(target=stak,args=(3,))
  14.  
  15. # strat() 是同时进行的
  16. p1.start()
  17. p2.start()
  18. p3.start()
  19.  
  20. # join等待的顺序是根据子进程工作结束的顺序来定的
  21. p1.join()
  22. p2.join()
  23. p3.join()
  24.  
  25. end_time = time.time()
  26. print(end_time - strat_time)
  27. print('over')

6.僵尸与孤儿进程

孤儿进程:

指的是,父进程先结束 ,而子进程还在运行着,

孤儿进程无害,有 其存在的必要性

例如:qq开启了浏览器,qq先退出了 浏览器应该继续运行

孤儿进程会被操作系统接管

僵尸进程:

值得是,子进程已经结束了,但是操作系统会保存一些进程信息,如PID,运行时间等,此时这个进程就称之为僵尸进程

僵尸进程如果太多将会占用大量的资源,造成系统无法开启新新进程

linux 中有一个wai/waitpid 用于父进程回收子进程资源

python会自动回收僵尸进程

进程,多进程,进程与程序的区别,程序运行的三种状态,multiprocessing模块中的Process功能,和join函数,和其他属性,僵尸与孤儿进程的更多相关文章

  1. day34 并行并发、进程开启、僵尸及孤儿进程

    day34 并行并发.进程开启.僵尸及孤儿进程 1.并行与并发 什么是并行? 并行指的是多个进程同时被执行,是真正意义上的同时 什么是并发? 并发指的是多个程序看上去被同时执行,这是因为cpu在多个程 ...

  2. Go Exec 僵尸与孤儿进程

    原文地址:Go Exec 僵尸与孤儿进程 最近,使用 golang 去管理本地应用的生命周期,期间有几个有趣的点,今天就一起看下. 场景一 我们来看看下面两个脚本会产生什么问题: 创建两个 shell ...

  3. OID,主键生成策略,PO VO DTO,get和load区别,脏检查,快照,java对象的三种状态

    主键生成策略 sequence 数据库端 native 数据库端 uuid  程序端 自动赋值 生成的是一个32位的16进制数  实体类需把ID改成String 类型 assigned  程序端 需手 ...

  4. Hibernate中对象的三种状态以及Session类中saveOrUpdate方法与merge方法的区别

    首先,用一张图说明一个对象,在Hibernate中,在调用了不同方法之后对象所处的不同状态 在Hibernate中,一个对象的状态可以被分为如图所示的三种 Transient:瞬时对象,该对象在数据库 ...

  5. python 开启进程两种方法 multiprocessing模块 介绍

    一 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu\_count\(\)查看),在python中大部分情况需要使用多进 ...

  6. fork()函数的执行过程、孤儿进程和僵尸进程

    说起fork就不得不提COW(Copy On Write),就是“写时拷贝”.也就是当fork发生时,子进程根本不会去拷贝父进程的内存页面,而是与父进程共享.当子进程或父进程需要修改一个内存页面时,L ...

  7. wait函数返回值总结,孤儿进程与僵尸进程[总结]

    http://blog.csdn.net/astrotycoon/article/details/41172389 wait函数返回值总结 http://www.cnblogs.com/Anker/p ...

  8. Android 跨进程启动Activity黑屏(白屏)的三种解决方案

    原文链接:http://www.cnblogs.com/feidu/p/8057012.html 当Android跨进程启动Activity时,过程界面很黑屏(白屏)短暂时间(几百毫秒?).当然从桌面 ...

  9. Linux如何让进程在后台运行的三种方法详解

    问题分析: 我们知道,当用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程.因此,我们的解决办法就有两种途径:要么让进程忽略 HUP 信号,要么让进程运 ...

随机推荐

  1. sysbench运行autogen.sh报错

    ./autogen.sh: 4: autoreconf: not found是在不同版本的 tslib 下执行 autogen.sh 产生.它们产生的原因一样,是因为没有安装automake 工具, ...

  2. White-Label Apps

    转载:https://www.vendasta.com/blog/white-label-apps What are white-label apps? White-label apps are ap ...

  3. jsp模糊查询

    模板 查询之前: 查询之后: jsp的<script>: $(".inp2").click(function(){ var s=$(".inp"). ...

  4. js数据持久化本地数据存储-JSON.parse和JSON.stringify的区别

    JSON.stringify()的作用是将 JavaScript 值转换为 JSON 字符串, 而JSON.parse()可以将JSON字符串转为一个对象. 简单点说,它们的作用是相对的,我用JSON ...

  5. Mac终端神器zsh

    Mac终端神器zsh 先上一张图 1.背景介绍 在unix 内核的操作系统中,当然现在衍生出好多分支,linux ,OS X 都算. shell 就算和上面这些系统内核指令打交道的一座桥梁,我们通过键 ...

  6. What is Double 11 in China? Is it a famous festival?

    "1" means single, 11th, November is quadruple single!! What a tragedy for those single you ...

  7. jquery image选择器 语法

    jquery image选择器 语法 作用::image 选择器选取类型为 image 的 <input> 元素.无锡大理石测量平台 语法:$(":image") jq ...

  8. Word:表格无法分页显示

    造冰箱的大熊猫@cnblogs 2019/1/30 今天遇到一个Word中表格无法分页显示的问题,特记录下来以备后查 我们知道,在Word中将表格不设置为“允许跨页断行”,假设表格中第二行某个单元格的 ...

  9. 十进制数转N进制c++实现

    编写一个算法,将一个非负的十进制整数N转换为另一个基数为B的B进制整数. #include <iostream> #include<string.h> using namesp ...

  10. hdu 5773 最长递增子序列 (nlogn)+贪心

    The All-purpose Zero Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...