1.进程

什么是进程:

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

2.多进程

 多个正在运行的程序

在python中实现多线程的方法

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

自定义开启子进程:

3.进程与程序的区别

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

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

一旦运行就产生了进程

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

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

4.程序运行的三种状态

1. 阻塞与非阻塞

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

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

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

2.并发

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

3.并行

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

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

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

      提高效率

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

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

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

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

#  Process其他使用方法

from multiprocessing import Process
def task():
print('')
exit(100) # 退出码 if __name__ == '__main__':
p = Process(target=task,name='李果')
p.start() # 此处名为懒加载优化机制,如果没有调用start ,那么该对象将不会被创建
p.join() # 等待子进程结束
p.terminate() # 终止进程
print(p.is_alive()) # 判断进程是否存活
print(p.pid) # 查看PID
print(p.exitcode) # 获取退出码
import time
from multiprocessing import Process def stak(i):
print('买烟去了')
time.sleep(i)
print('%s 买完了!'% i) if __name__ == '__main__':
strat_time = time.time()
p1 = Process(target=stak,args=(1,))
p2 = Process(target=stak,args=(2,))
p3 = Process(target=stak,args=(3,)) # strat() 是同时进行的
p1.start()
p2.start()
p3.start() # join等待的顺序是根据子进程工作结束的顺序来定的
p1.join()
p2.join()
p3.join() end_time = time.time()
print(end_time - strat_time)
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. Spark RDD初探(一)

    本文概要 本文主要从以下几点阐述RDD,了解RDD 什么是RDD? 两种RDD创建方式 向给spark传递函数Passing Functions to Spark 两种操作之转换Transformat ...

  2. Django项目开发,XSS攻击,图片防盗链,图片验证码,kindeditor编辑器

    目录 一.Django项目开发 1. 项目开发流程 2. auth模块的补充 (1)django的admin可视化管理页面 (2)将admin可视化管理页面的模型表显示成中文 (3)auth模块的用户 ...

  3. Acwing-169-数独2(搜索, 剪枝)

    链接: https://www.acwing.com/problem/content/171/ 题意: 请你将一个16x16的数独填写完整,使得每行.每列.每个4x4十六宫格内字母A~P均恰好出现一次 ...

  4. 浅谈Spring @Order注解的使用(转)

    注解@Order或者接口Ordered的作用是定义Spring IOC容器中Bean的执行顺序的优先级,而不是定义Bean的加载顺序,Bean的加载顺序不受@Order或Ordered接口的影响: 1 ...

  5. 33. ClustrixDB 扩展集群的容量-Flex up

    ClustrixDB被授权为每个节点的最大核数以及集群的最大节点数.如果需要扩展许可证,请联系Clustrix Sales.扩容之前检查License是否支持节点数. 一.准备节点 提供节点并在每个节 ...

  6. git 版本撤销,回退等

    git checkout -- <file>       #丢弃工作区的修改, 不要省略 -- ,这是只在工作区(work tree)修改了内容,还没有add 到暂存区,此时想撤销修改. ...

  7. yii 创建模块module

    yii安装完成后的使用: yii也是单入口脚本, 入口文件为  http://hostname/web/index.php 使用模块: 在根目录下创建modules目录 在modules目录下创建模块 ...

  8. ga

    https://developers.google.com/analytics/devguides/collection/gtagjs/events ga 添加事件示例: 在代码中指定您自己的值,就可 ...

  9. Linux-配置共享目录

    找到相关rpm包 运行以及错误解决** rpm -ivh tcp_wrappers-7.6-34.i386.rpm rpm -ivh portmap-4.0-54.i386.rpm rpm -ivh ...

  10. 关于java中对BigDecimal加减乘除的基本用法

    Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算.双精度浮点型变量double可以处理16位有效数. 在实际应用中,需要对更大或者更小的数进 ...