并发多进程--day32

# 并发多进程

# 1. 并发编程
# 让你的程序可以同时处理多个任务
#
# 2.并发的基石是 多道技术
# 空间复用: 同一时间 内存存储了多个应用程序
# 不同应用程序之间的内存是相互独立的
# 时间复用: 当一个程序遇到了IO操作时 会切换到其他应用程序 ,以此来提高CPU的利用率

# 多道技术的缺点: 当应用程序都是计算任务时 切换反而降低效率 (但是必须得切 才能保证多任务并发)
#
# 3.并发 与 并行
# 并发 多个事件 同时发生, 也称之为伪并行
# 并行 多个事件 同时进行,
#
# 阻塞和非阻塞 指的是程序的状态
# 就绪 运行 阻塞

# 4.两种使用进程的方式
# 1.直接创建Process对象 指定target参数
# 2.继承Process 覆盖run方法

# 5.join函数
# 提高优先级 使 父进程等待子进程结束

# 6.孤儿进程与僵尸进程路径了解
#
# 孤儿进程 是指 父进程已经终止了 但是自己还在运行 是无害的
# 孤儿进程会自定过继给操作系统

# 僵尸进程 是指 子进程执行完成所有任务 已经终止了但是 还残留一些信息(进程id 进程名)
# 但是父进程 没有去处理这些残留信息 导致残留信息占用系统内存
# 僵尸进程时有害的

# 当出现大量的僵尸进程时 会占用系统资源 可以把它父进程杀掉 僵尸就成了孤儿 操作系统会负责回收数据
# 子进程中的数据修改 不会影响父进程
# 给操作系统发送请求后 代码继续往下运行 至于子进程 什么时候创建 什么是执行 都跟当前进程没关系


# 常用属性
# p.terminate() # 终止这个进程
# p.daemon # 守护进程,如果子进程结束父进程也结束

# 开启多进程的方式一:
import os

def task(name):
print(name)
print("self",os.getpid())#获取自己的进程id
print("parent", os.getppid())#parent 获取父进程的id
print("task run")

# windows创建子进程时 子进程会将父进程的代码加载一遍 导致重复创建子进程
# 所以一定要将 创建子进程的代码放到main的下面
if __name__ == '__main__':
print("self", os.getpid())
print("parent", os.getppid())
p = Process(target=task, name="这是子进程!",kwargs={"name":"bgon"}) # 创建一个表示进程的对象 但并不是真正的创建进程

# 给操作系统发送请求后 代码继续往下运行 至于子进程 什么时候创建 什么是执行 都跟当前进程没关系
p.start() # 给操作系统发送通知 要求操作系统开启进程



# 开启多进程的方式二:
# 创建进程的第二种方式 继承Process 覆盖run方法
# 在子进程启动以后会自动执行run方法
# 其优势是 可以自定义 进程的属性和行为 来完成一些额外任务 例如下载
class MyProcess(Process):

def __init__(self,url):
self.url = url
super().__init__()

# 子类中的方法 只有run会被自动执行
def run(self):
print("下载文件...." , self.url)
print(" run run run!")

def task(self):
pass

def task():
print(123)

if __name__ == '__main__':
p = MyProcess("www.baidu.com/xx.mp4")
p.start()




# 利用join来使父进程等待子进程结束后父进程在运行

# 本质上 是提高了子进程优先级 当CPU在切换时 会优先切子进程

def task(num):
print("我是%s号 进程" % num)
time.sleep(2)
print("=========")

if __name__ == '__main__':
start_time = time.time()
ps = []
for i in range(3):
p = Process(target=task,args=(i,))
p.start()
print("----")
# ps.append(p)

for p in ps:
p.join()

print(time.time()-start_time)
print("over")
posted @ 2018-12-28 16:51  WenChen-0o0  阅读(106)  评论(0编辑  收藏  举报