前言
多任务可以提高效率,比如生活中,可以一边看电视一边吃饭。下面就用python中的进程来模拟下
提示:以下是本篇文章正文内容,下面案例可供参考
1.概念
进程是操作系统给程序分配资源的最小单位。
而一个正在运行的软件就是一个程序,比如pycharm,chrome。操作系统会把内存,cpu,磁盘网络这个资源给程序。
2.python中单进程
会按照顺序从上往下执行,这个就是程序运行时默认创建的主进程,每隔一秒打印一行信息,6s执行完成。
import time
def eat():
for i in range(3):
time.sleep(1)
print('吃东西~')
def look_tv():
for i in range(3):
time.sleep(1)
print('看电视~')
if __name__ == '__main__':
# 记录从1970年到当前的秒数,单位是秒
start = time.time()
eat()
look_tv()
end = time.time()
print(f'共用时{end-start:.2f}s')
输出结果:
吃东西~
吃东西~
吃东西~
看电视~
看电视~
看电视~
共用时6.00s
3.python中多进程
主进程创建的进程叫子进程
让程序运行时的主进程在创建多个子进程,输出的结果会比较杂乱,原因是CPU的调度是无序的。
3.1默认情况
"""
进程的创建步骤
1.导入进程包
import multiprocessing
2.通过进程类创建进程对象
进程对象= multiprocessing.Process(target=任务名)
target:执行的目标任务名,这里指的是函数名(方法名)
name:进程名,一般不用设置
group:进程组,目前只能使用None
3.启动进程执行任务
进程对象.start()
"""
import time
import multiprocessing
def eat():
for i in range(3):
time.sleep(1)
print('吃东西~')
def look_tv():
for i in range(3):
time.sleep(1)
print('看电视~')
if __name__ == '__main__':
# 创建子进程
eat_process = multiprocessing.Process(target=eat)
look_tv_process = multiprocessing.Process(target=look_tv)
# 记录从1970年到当前的秒数,单位是秒
start = time.time()
# 启动子进程
eat_process.start()
look_tv_process.start()
end = time.time()
print(f'共用时{end-start:.2f}s')
输出结果:
共用时0.02s
吃东西~
看电视~
看电视~吃东西~
吃东西~
看电视~
3.2子进程调用join方法
每个子进程对象调用join方法,让子进程优先使用CPU
import time
import multiprocessing
def eat():
for i in range(3):
time.sleep(1)
print('吃东西~')
def look_tv():
for i in range(3):
time.sleep(1)
print('看电视~')
if __name__ == '__main__':
# 创建子进程
eat_process = multiprocessing.Process(target=eat)
look_tv_process = multiprocessing.Process(target=look_tv)
# 记录从1970年到当前的秒数,单位是秒
start = time.time()
# 启动子进程
eat_process.start()
look_tv_process.start()
# 优先让子进程使用cpu
eat_process.join()
look_tv_process.join()
end = time.time()
print(f'共用时{end-start:.2f}s')
输出结果:
看电视~
吃东西~
看电视~
吃东西~
吃东西~
看电视~
共用时3.12s
可以看到节约了大概3s