1.进程
1.程序:静态的,一个.py文件就是存储在硬盘中的,属于静态的概念
2.进程:动态的,代码加所需的资源 = 进程,是操作系统分配程序执行资源的单位,多进程也是可以满足多任务的
2.进程的状态有:
就绪态:运行的条件都满足,就等CPU执行
执行态:CPU正在执行的
等待态:等待某些条件满足,例如等待消息回复,等待同步锁等
3.进程的创建方法一:
1.通过multiprocessing模块创建子进程
1.导入模块multiprocessing
2.准备任务函数(用来编写进程代码)
3.由multiprocessing模块的Process创建子进程
4.执行子进程
4.进程的创建方法二-进程池POOL:
1.进程池是什么,有什么用?
进程池指当需要在创建多个子进程时,创建一个进程池用来构建更多的子进程
进程池可以控制进程的数量,重复利用进程对象,减少创建和销毁过程的开销
2.进程池的使用:
1.创建进程池,也可以设置进程池的最大值,如果没有写值,则默认当前主机cpu核数
multiprocessing.Pool()
2.apply_async(func[,args[,kwds]])
任务异步执行:指你做一个任务,我同时也开启一个进程做我的任务
--func:子进程要执行的函数
--args:向子进程执行的函数传递可变参数
--kwds:向子进程执行的函数传递关键字参数
3.close():关闭进程池,不在接收新的任务请求
4.terminate():终止进程池中所有的子进程
5.join():
process.join:阻塞主进程,直到进程池中的子进程执行完毕
注意:必须在close或terminate之后使用
1.通过multiprocessing模块创建子进程
1.导入模块multiprocessing
2.准备任务函数(用来编写进程代码)
3.由multiprocessing模块的Process创建子进程
4.执行子进程
#.导入模块
import multiprocessing
#2.准备任务函数
import time
def work1():
while True:
time.sleep(1)
print("---work1---")
def work2():
while True:
time.sleep(1)
print("---work2---")
if __name__ == '__main__':
#由multiprocessing模块的Process创建子进程
p1 = multiprocessing.Process(target=work1)
p2 = multiprocessing.Process(target=work2)
#执行子进程
p1.start()
p2.start()
2.进程的创建方法二-进程池POOL:
1.创建进程池,也可以设置进程池的最大值,如果没有写值,则默认当前主机cpu核数
multiprocessing.Pool()
2.apply_async(func[,args[,kwds]])
任务异步执行:指你做一个任务,我同时也开启一个进程做我的任务
--func:子进程要执行的函数
--args:向子进程执行的函数传递可变参数
--kwds:向子进程执行的函数传递关键字参数
3.close():关闭进程池,不在接收新的任务请求
4.terminate():终止进程池中所有的子进程
5.join():
process.join:阻塞主进程,直到进程池中的子进程执行完毕
注意:必须在close或terminate之后使用
6.参考代码:
import multiprocessing
import random
import time
def work1():
for i in range(6):
time.sleep(1)
print("----work1----")
def work2():
for i in range(6):
time.sleep(1)
print("----work2----")
def work3():
for i in range(3):
time.sleep(1)
print("----work3----")
def work4():
for i in range(3):
time.sleep(1)
print("----work4----")
if __name__ == '__main__':
#通过进程池一样可以进行多任务,但是这种方式用于当任务数比较多的时候
#当任务数大于进程池的最大值时,则会有一部分进程处于等待状态,一旦进
# 程池里的代码运行完毕即会切向另一个子进程
pool = multiprocessing.Pool(processes=3)
pool.apply_async(func=work1)
pool.apply_async(func=work2)
pool.apply_async(func=work3)
pool.apply_async(func=work4)
pool.close()
pool.join()#阻塞主进程,直到进程池中的子进程执行完毕,在解阻塞注意这里的join只能在.close或者.terminate后进行,
守护进程:
2.守护进程
1.什么是守护进程?
主要做与业务无关的任务,无关紧要的任务,比如内存垃圾回收,计时等,
也就说当子进程是守护进程时,主进程结束后会发送一个消息给子进程,
子进程收到后立即结束,主进程不会等待守护进程执行完在结束,
因为守护进程是无关紧要的一些进程
一般情况下,主进程创建的是非守护进程
2.守护进程如何开启
通过进程名.daemon = Ture
参考代码:
#.导入模块
import multiprocessing
#2.准备任务函数
import time
def work1():
while True:
time.sleep(1)
print("---work1---")
def work2():
while True:
time.sleep(1)
print("---work2---")
if __name__ == '__main__':
#由multiprocessing模块的Process创建子进程
p1 = multiprocessing.Process(target=work1)
p2 = multiprocessing.Process(target=work2)
#开启守护进程,需要在开启前做
#当开启守护进程后,主进程很快就结束了所有进程,子进程也会被关闭,所以不会打印
p1.daemon = True
p2.daemon = True
#执行子进程
p1.start()
p2.start()
print("-----------")