线程队列,线程池和协程
线程的其他方法:
threading.current_thread() #当前线程对象
getName() # 获取线程名
ident # 获取线程id
threading.enumerate() # 当前正在运行的线程对象的一个列表
threading.active_count() # 当前正在运行的线程数量
import time
from threading import Thread,current_threaddef f1(n):print(f"{n}号线程正在运行")print("子线程的名称",current_thread().getName())if __name__ == '__main__':t = Thread(target=f1,args=(1,),name = '123')t.start()print("主线程的名称", current_thread().getName())
线程队列:(重点)
import queue
先进先出队列:queue.Queue(3)
先进后出\后进先出队列:queue.LifoQueue(3)
优先级队列:queue.priorityQueue(3)
put的数据是一个元组,元组的第一个参数是优先级数字,数字越小优先级越高,越先被get到被取出来,第二个参数是put进去的值,如果说优先级相同,那么值别忘了应该是相同的数据类型,字典不行
import queue
# q = queue.Queue(3)
# q.put(1)
# q.put(2)
# print(q.qsize())
# try :
# q.put_nowait(3)
# except :
# print('满了')
# print(q.full())
#
# print(q.get())
# print(q.get())
# print(q.get())q = queue.PriorityQueue(3)
q.put((2,'white'))
q.put((1,'卢本伟'))
q.put((2,'55开'))print(q.get())
print(q.get())
print(q.get())
线程池:
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
t = ThreadPoolExecutor(4) #默认的线程个数是cpu个数 * 5
p = ProcessPoolExecutor(4) #默认的进程个数是cpu个数
t.map(f1,可迭代的对象) #异步执行
import time
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutordef f1(n):time.sleep(1)print(n)if __name__ == '__main__':t = ThreadPoolExecutor(5)t.map(f1,range(10))t.shutdown()print('主程序结束')
def f1(n1,n2):
print(n1,n2)
t.submit(f1,11,12) #异步提交任务
res = t.submit(f1,11,12)
res.result() #和get方法一样,如果没有结果,会等待,阻塞程序
shutdown() # close+join,锁定线程池,等待线程池中所有已经提交的任务全部执行完毕
import time
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutordef f1(n,m):time.sleep(1)print(n)return n+mif __name__ == '__main__':t = ThreadPoolExecutor(5)t_lis = []for i in range(10):ret = t.submit(f1,i,5)t_lis.append(ret)t.shutdown()for i in t_lis:print(i.result())print('主程序结束')
协程的概念:可以理解为微线程,在遇到io阻塞时,保存当前状态并进行切换,且阻塞时间是并行的. 既节省时间,又提高效率.
import gevent #导入模块
gevent.sleep(1) # 该方法的阻塞时间可以被识别并执行,如果是time.sleep()是不能识别,且不会节省时间的
g1 = gevent.spawn(f1) # 异步提交f1和f2任务
g2 = gevent.spawn(f2) # 异步提交f1和f2任务
gevent.joinall ( [g1,g2] ) # 等待执行完才继续执行 相当于 g1.join() 和 g2.join()
import geventdef f1():print('1号开启游戏')gevent.sleep(2)print('1号吃鸡了')def f2():print('2号开启游戏')gevent.sleep(2)print('2号吃鸡了')g1 = gevent.spawn(f1) #异步提交f1任务
g2 = gevent.spawn(f2) #异步提交f2任务g1.join()
g2.join() # gevent.joinall([g1,g2])print("主程序结束")
转载于:https://www.cnblogs.com/gyc-tzx/p/10268835.html
线程队列,线程池和协程相关推荐
- 0820Python总结-线程队列,进程池和线程池,回调函数,协程
一.线程队列 from queue import Queue put 存 get 取 put_nowait 存,超出了队列长度,报错 get_nowait 取,没数据时,直接报错 Linux Wind ...
- python协程池_python3下multiprocessing、threading和gevent性能对比—-暨进程池、线程池和协程池性能对比 | 学步园...
目前计算机程序一般会遇到两类I/O:硬盘I/O和网络I/O.我就针对网络I/O的场景分析下python3下进程.线程.协程效率的对比.进程采用multiprocessing.Pool进程池,线程是自己 ...
- Kotlin学习笔记26 协程part6 协程与线程的关系 Dispatchers.Unconfined 协程调试 协程上下文切换 Job详解 父子协程的关系
参考链接 示例来自bilibili Kotlin语言深入解析 张龙老师的视频 1 协程与线程的关系 import kotlinx.coroutines.* import java.util.concu ...
- python多线程队列和池_Python3 从零单排28_线程队列进程池线程池
1.线程队列 线程队列有三种:先进先出,后进先出,按优先级进出,具体如下: 1 importqueue2 3 #先进先出 4 q = queue.Queue(3)5 6 q.put(1)7 q.put ...
- 连接池和协程池为何能提升并发能力?
你有没有发现,"内存池"和"进程池"都带有"池"字?其实,这两种技术都属于"池化技术".它通常是由系统预先分配一批资源并 ...
- Python 线程----线程方法,线程事件,线程队列,线程池,GIL锁,协程,Greenlet
主要内容: 线程的一些其他方法 线程事件 线程队列 线程池 GIL锁 协程 Greenlet Gevent 一. 线程(threading)的一些其他方法 from threading import ...
- 线程队列 线程池 协程
1 . 线程队列 from multiprocessing Queue , JoinableQueue #进程IPC队列 from queue import Queue #线程队列 先进先出 f ...
- 线程队列,线程池以及协程
线程 queue 线程的queue,类似于进程 作用也是类似,queue(n)规范放入值的数量 queue.Queue(maxsize = 0) 这个和之前一样是为了实现先进先出 import que ...
- 线程队列,线程池,协程
线程 queue 线程的queue,类似于进程 作用也是类似,queue(n)规范放入值的数量 queue.Queue(maxsize = 0) 这个和之前一样是为了实现先进先出 import que ...
最新文章
- mybatis注解开发
- 涂抹mysql笔记-mysql复制特性
- 学习伟大的Python的第七天
- CodeForces - 1036D Vasya and Arrays(思维)
- 数据库设计笔记——有效设计数据库的目标(二)
- oracle中的自带函数,求完整的ORACLE自带函数文档
- NSByteCountFormatter
- 把url地址复制到粘贴板上_写个简单的python爬虫爬取堆糖上漂亮的小姐姐
- iframe高度自适应 1
- CPU又烧了,说起来汝可能不信
- 文献管理三剑客之Mendeley最新版使用小记
- Windows 7 “Tunnel adapter Local Area Connection” 现象(IPv6)
- [转]Go语言(golang)开源项目大全
- 02web前端笔试题
- sql2008安装图解 sql server 2008 R2安装教程
- RNA-seq 详细教程:似然比检验(13)
- IEEE Geoscience and Remote Sensing Letters (GRSL)从投稿到录用过程分享
- 区块链软件开发公司 区块链的基本原理
- uniapp m3u8格式视频加载
- 手机安装pem_使用HTTP网址分发并安装iOS程序
热门文章
- boost::iterators::minimum_category用法的测试程序
- hana::detail::variadic::foldr1用法的测试程序
- boost::adjacency_list用法的测试程序
- GDCM:gdcm::Command的测试程序
- OpenCV脱色的实例(附完整代码)
- Qt Creator图片
- C语言已排序链表插入新节点保持排序状态(附完整源码)
- QT的QUndoCommand类的使用
- QT的QSemaphoreReleaser类的使用
- C/C++语言开源库