python基础进程和子线程

单核cpu实现多任务的原理
在这里插入图片描述
多核cpu实现多任务的原理
在这里插入图片描述
以上图片来自千峰教育,如有侵权联系删除
‘’’
什么叫多任务:操作系统可以同时运行多个任务,现代的操作系统比如windows、mac os、liunx、unix等都是支持多任务的系统
‘’’
‘’'实现多任务的方式
1、多进程模式:启动多个进程,每个进程虽然只有一个线程,但是多个进程可以一起执行多个任务

2、多线程模式:启动一个进程,在一个进程的内部启动多个线程,这样多个线程也可以一起执行多个任务
3、多进程+多线程:启动多个进程,每个进程再启动多个线程
4、协程
5、多进程+协程

‘’’
父子进程的先后执行顺序

from  multiprocessing import Process
from  time import sleep


def run():
    print("启动子进程")
    sleep(3)
    print("结束子进程")


if __name__ =="__main__":
    print("启动主进程")
    p = Process(target=run)
    p.start()
    print('========')
    #主进程的结束不能影响子进程,随意可以等待子进程结束在结束主进程

    #等待子进程结束,才能继续执行主进程
    #后期主进程主要做的是调度相关的工作,不具体负责业务逻辑
    p.join()
    print('--------')

    print("结束主进程")

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体

对于操作系统来说 一个任务就是一个进程比如说打开一个浏览器就是启动一个浏览器的进程,在打开一个记事本就启动了一个记事本进

练习:多线程遍历目录

import os,time
from  multiprocessing import Pool#Pool进程池
def run(path):
    files = os.listdir(path)
    for item in files:
        print(os.path.join(path,item))
if __name__=='__main__':
    path = r"E:\Python练习"
    filesList  =os.listdir(path)
    t1 = time.time()
    pool =Pool(5)
    for filename in filesList:
        absPath = os.path.join(path,filename)
        # print(absPath)
        pool.apply_async(run,args=(absPath,))
            pool.close()#我们要告诉主进程,你等着所有子进程运行完毕后在运行剩余部分  #close必须在join前调用
    pool.join()
    t2 = time.time()
    print(t2-t1)

os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。这个列表以字母顺序。 它不包括 ‘.’ 和’…’ 即使它在文件夹中。

只支持在 Unix, Windows 下使用
#apply方法是阻塞的。意思就是等待当前子进程执行完毕后,在执行下一个进程
#apply_async 是异步非阻塞的。意思就是:不用等待当前进程执行完毕,随时根据系统调度来进行进程切换
‘’’
apply是阻塞式的。
首先主进程开始运行,碰到子进程,操作系统切换到子进程,等待子进程运行结束后,在切换到另外一个子进程,直到所有子进程运行完毕。然后在切换到主进程,运行剩余的部分。

apply_async是异步非阻塞式的。
首先主进程开始运行,碰到子进程后,主进程说:让我先运行个够,等到操作系统进行进程切换的时候,在交给子进程运行。以为我们的程序太短,然而还没等到操作系统进行进程切换,主进程就运行完毕了。

作者:有点d伤
链接:https://www.jianshu.com/p/0a55507f9d9e
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
‘’’

#异步非阻塞式;正因为是异步非阻塞式的,不用等待当前运行的子进程执行完毕,随时根据系统调度来进行进程切换。基本上主进程和三个子进程,四个进程是同时运行的。

#阻塞式:
#9秒多。以为是阻塞式,需要等待当前子进程执行完毕后,在执行下一个子进程。

猜你喜欢

转载自blog.csdn.net/qq_42817166/article/details/84181878
今日推荐