一、多进程
1.
一个应用程序默认有一个进程(主进程),一个进程中默认一个线程
一个应用程序可以有多个进程,每个进程可以有多个线程、
同一进程中多个线程的数据可以共享,不同进程中的数据无法直接共享
2.
一个应用程序默认有一个进程需要多个进程,需要手法创建进程
多进程程序必须添加
3.多进程使用
进程对象.Process(target = 函数,args =元组)
进程对象.star()
进程对象 .join
二、线程池
1.创建线程池
pool = ThreadPoolExecutor(5)
2.添加任务
1)一次添加一个任务 - 线程池对象.submit(函数,实参1,实参2……)
pool.submit(download, '肖申克的救赎')
2)一次添加多个任务 - 线程池对象.map(函数,[数据1,数据2,数据3……])
注:这个地方任务对应的函数必须是有且只有一个参数的函数
pool.map(download,['霸王别姬','阿甘正传','触不可及'],)
三、线程队列
from queue import Queue
1.方法一
1)在主线程中创建列表,然在子线程中直接往列表添加数据
2)等所有任务都完成后获取数据
2.方法二
1)将子线程中产生的函数作为一个返回值
2)获取map函数的返回值(返回值是一个生成器,生成器中的元素就是每次调用函数,函数的返回值)
3.方法三
1)在主线程创建一个队列
2)在子线程中往队列添加数据
3)在主线程中获取队列的数据
1)创建对象:Queue()
2)添加数据:队列对象.put(数据)
3)获取数据:队列对象.get() 队列对象.get(timeout = 超时时间)
如果队列是空,队列get操作不会报错,并且会进入等待状态,等到有数据进入队列为止