线程的其他方法:

  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

线程队列,线程池和协程相关推荐

  1. 0820Python总结-线程队列,进程池和线程池,回调函数,协程

    一.线程队列 from queue import Queue put 存 get 取 put_nowait 存,超出了队列长度,报错 get_nowait 取,没数据时,直接报错 Linux Wind ...

  2. python协程池_python3下multiprocessing、threading和gevent性能对比—-暨进程池、线程池和协程池性能对比 | 学步园...

    目前计算机程序一般会遇到两类I/O:硬盘I/O和网络I/O.我就针对网络I/O的场景分析下python3下进程.线程.协程效率的对比.进程采用multiprocessing.Pool进程池,线程是自己 ...

  3. Kotlin学习笔记26 协程part6 协程与线程的关系 Dispatchers.Unconfined 协程调试 协程上下文切换 Job详解 父子协程的关系

    参考链接 示例来自bilibili Kotlin语言深入解析 张龙老师的视频 1 协程与线程的关系 import kotlinx.coroutines.* import java.util.concu ...

  4. python多线程队列和池_Python3 从零单排28_线程队列进程池线程池

    1.线程队列 线程队列有三种:先进先出,后进先出,按优先级进出,具体如下: 1 importqueue2 3 #先进先出 4 q = queue.Queue(3)5 6 q.put(1)7 q.put ...

  5. 连接池和协程池为何能提升并发能力?

    你有没有发现,"内存池"和"进程池"都带有"池"字?其实,这两种技术都属于"池化技术".它通常是由系统预先分配一批资源并 ...

  6. Python 线程----线程方法,线程事件,线程队列,线程池,GIL锁,协程,Greenlet

    主要内容: 线程的一些其他方法 线程事件 线程队列 线程池 GIL锁 协程 Greenlet Gevent 一. 线程(threading)的一些其他方法 from threading import ...

  7. 线程队列 线程池 协程

    1 . 线程队列 from multiprocessing Queue , JoinableQueue  #进程IPC队列 from queue import Queue  #线程队列  先进先出 f ...

  8. 线程队列,线程池以及协程

    线程 queue 线程的queue,类似于进程 作用也是类似,queue(n)规范放入值的数量 queue.Queue(maxsize = 0) 这个和之前一样是为了实现先进先出 import que ...

  9. 线程队列,线程池,协程

    线程 queue 线程的queue,类似于进程 作用也是类似,queue(n)规范放入值的数量 queue.Queue(maxsize = 0) 这个和之前一样是为了实现先进先出 import que ...

最新文章

  1. mybatis注解开发
  2. 涂抹mysql笔记-mysql复制特性
  3. 学习伟大的Python的第七天
  4. CodeForces - 1036D Vasya and Arrays(思维)
  5. 数据库设计笔记——有效设计数据库的目标(二)
  6. oracle中的自带函数,求完整的ORACLE自带函数文档
  7. NSByteCountFormatter
  8. 把url地址复制到粘贴板上_写个简单的python爬虫爬取堆糖上漂亮的小姐姐
  9. iframe高度自适应 1
  10. CPU又烧了,说起来汝可能不信
  11. 文献管理三剑客之Mendeley最新版使用小记
  12. Windows 7 “Tunnel adapter Local Area Connection” 现象(IPv6)
  13. [转]Go语言(golang)开源项目大全
  14. 02web前端笔试题
  15. sql2008安装图解 sql server 2008 R2安装教程
  16. RNA-seq 详细教程:似然比检验(13)
  17. IEEE Geoscience and Remote Sensing Letters (GRSL)从投稿到录用过程分享
  18. 区块链软件开发公司 区块链的基本原理
  19. uniapp m3u8格式视频加载
  20. 手机安装pem_使用HTTP网址分发并安装iOS程序

热门文章

  1. boost::iterators::minimum_category用法的测试程序
  2. hana::detail::variadic::foldr1用法的测试程序
  3. boost::adjacency_list用法的测试程序
  4. GDCM:gdcm::Command的测试程序
  5. OpenCV脱色的实例(附完整代码)
  6. Qt Creator图片
  7. C语言已排序链表插入新节点保持排序状态(附完整源码)
  8. QT的QUndoCommand类的使用
  9. QT的QSemaphoreReleaser类的使用
  10. C/C++语言开源库