线程是执行用的,队列是存放结果用的
目录
1 多线程 threading
1.1 基本用法
1.2 循环使用
2 队列 queue
2.1 先进先出 queue.Queue()
2.2 后进先出 queue.LifoQueue()
2.3 优先级队列
3 线程池
使用的库为threading,threading是python内置的库
我们每运行一个python文件相当于开启了一个进程,一个进程中有多个线程,如果使用了多线程我们可以在一段py代码中并行运行程序
我下面做个简单的例子
我们发现第一个任务运行的时候,第二个任务并没有等待第一个任务结束后再开始运行,而是开启了任务一后,直接开启任务二
开始的时候会根据start()的顺序开始,结束的时候,线程各自执行不会等待其他的线程
队列常用于处理多线程产生的结果
依次放入1,2,3三个值,然后取三次,发现可以成功的按顺序取出1,2,3
如果队列空了之后再取,就会无限等待
依次放入1,2,3三个值,然后取三次,发现可以成功的按顺序取出3,2,1
如果队列空了之后再取,就会无限等待
依次放入(2, 'B') ,(1, 'A') ,(3, 'C') 。元组的第一个值是优先级,数字越小优先级越高
如果队列空了之后再取,就会无限等待
我们现在搞一个4线程的线程池,然后搞五个任务
Pool()中间的值是线程的个数,pool.map的第一个参数是要执行什么函数,第二个参数是函数的参数。pool.close()是不让别的线程再进入线程池。pool.join()是等待线程池中的所有线程结束再执行下面的代码。
我们通过上面的结果可以看出,一开始执行了4个任务,等一个任务完成后自动开始执行第五个任务