day27_python_1124

1.内容回顾

2.今日内容

3.创建-进程Process

4.join方法

5.进程之间数据隔离

1.内容回顾

# 进程 :是计算机中最小的资源分配单位
# 进程的三状态 :就绪 运行 阻塞
# 并发和并行 :
  # 并行 :在一个时刻上,有多个进程在被CPU计算
  # 并发 :在一个时间段上,有多个进程在被CPU计算
# 同步异步 :
  # 同步 :一件事情与另一件事情有一定的顺序
  # 异步 :两件事情可以同时进行
# 阻塞和非阻塞:
  # 阻塞 : input sleep recv accept recvfrom
  # 非阻塞 :不需要等待就可以直接完成的事情

2.今日内容

# 进程
# 如何去在python代码中 启动一个进程
# 新的模块 :multiprocessing
# 进程模块 :启动进程、基础的进程信息的获取、管理
# 进程的同步
# 进程之间的数据共享
# 进程之间的通信
# 进程池

3.创建-进程Process

import os
import time
from multiprocessing import Process
# print(os.getpid()) #线程id

def func():
time.sleep(1)
print('hello',os.getpid())

if __name__ == '__main__':
for i in range(10):
Process(target=func).start() #开启进程
time.sleep(1)
print('hello2',os.getpid())

# 几个概念 :
  # 父进程 :父进程执行的过程中创建了子进程
  # 子进程 :
  # 主进程 :一般我们直接执行的那个程序就是主进程
# 为什么要有if __name__ == '__main__': windows操作系统开启子进程的方式问题
# 如何开启多个子进程  for  while

getppid()  #显示父进程

def func():
time.sleep(1)
print('hello',os.getpid(),os.getppid())

if __name__ == '__main__':
for i in range(3):
p = Process(target=func)
p.start()
time.sleep(1)
print('hello2',os.getpid())

# 如何给子进程传参数 ?

import time
from multiprocessing import Process

def func(num,name):
print(num,'hello',name)

if __name__ == '__main__':
for i in range(10):
p = Process(target=func,args=(i,'yuan',)) #(,)不能一个元素
p.start() #非阻塞
print('主进程')

# 子进程可以有返回值么?
  # 不能有返回值
# 因为子进程函数中的返回值无法传递给父进程,因为内存隔离的问题

4.join方法

# 主进程会默认等待子进程结束之后才结束
# 父进程要负责回收子进程占用的操作系统资源
import time
from multiprocessing import Process

def wahaha():
time.sleep(3)
print('in wahaha')

if __name__ == '__main__':
Process(target=wahaha()).start()
print('主进程')
import time
from multiprocessing import Process

def send_mail(n):
time.sleep(0.5)
print('发送邮件%s'%n)

if __name__ == '__main__':
l = []
for i in range(10):
p = Process(target=send_mail,args=(i,))
l.append(p)
p.start()
for p in l:
p.join() #阻塞到所有子进程执行完
print('所有的邮件都已经发出')

5.进程之间数据隔离

from multiprocessing import Process
n = 100
def func():
global n
n = n - 1
if __name__ == '__main__':
p_lst = []
for i in range(100):
p = Process(target=func)
p.start()
p_lst.append(p)
for p in p_lst:
p.join()
print(n)

猜你喜欢

转载自www.cnblogs.com/yijue-lu/p/10326747.html