博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python多线程的实现方法总结
阅读量:5305 次
发布时间:2019-06-14

本文共 1927 字,大约阅读时间需要 6 分钟。

  • 本篇文章介绍支持python多线程编程的模块及其使用方法,主要有thread,threading,Queue,multiprocessing等
  • 关于多线程编程的适用环境以及和多进程编程的区别,可查看

thread 模块

  • thread模块在官方的介绍中并不推荐使用,原因在于thread模块对进程的退出没有控制,只有较少的同步原语等,因此这里不花太多时间介绍了
  • 其包含的功能可以使用更高级的threading模块实现

threading 模块

  • Thread 类
    • 多线程的实现主要用Thread类来执行,该类包含多种常用的方法
      • __init__(target=None,args=(),kwargs={},group=None,name=None,daemon=None)
        • 实现一个线程的实例,前两个参数常用,后几个参数很少用到
      • start()
        • 开始执行这个线程
      • join(timeout=None)
        • 设置该线程最长执行时间。
        • 如果线程执行完成,正常退出并且返回
        • 如果线程处于挂起状态(阻塞),则最多阻塞timeout时长(单位s),如未设置,则一直处于阻塞中
      • is_alive()
        • 该线程是否还存活,是,返回True,否返回False
      • 简单示例:
        • theads = []for i in range(count):t = threading.Thread(target=loop,args=(i,)) #loop为线程执行的函数名theads.append(t)for thead in theads:thead.start()for thead in theads:thead.join()

Queue 模块

  • Queue是什么?能干什么?怎么实现?
    • 是一个提供线程间的通信机制的模块
    • 让线程之间可以分享数据
    • 创建一个队列,让生产者(线程)在其中放入新的商品(数据),而消费者(线程)消费这些商品(数据)
  • Queue模块属性
    • Queue(maxsize=0)
      • 创建一个先入先出的队列
      • 如给定maxsize,则在队列没有空间时阻塞;否则,为无限队列
    • LifoQueue(maxsize=0)
      • 创建一个后入先出的队列
    • PriorityQueue(maxsize=0)
      • 创建一个优先级队列
    • Queue队列异常
      • Empty
        • 当队列为空时,仍用get()方法时,抛出Empty异常
      • Full
        • 当队列已满时,仍用pull()方法时,抛出Full异常
    • Queue实例方法
      • qsize()
        • 返回队列大小
      • empty()
        • 返回队列是否为空。是True,否False
      • full()
        • 返回队列是否已满。是True,否False
      • put(item,block=True,timeout=None)
        • 将item放入队列
        • block为True,在队列已满时阻塞;False,空间已满时抛出Full异常
        • timeout,如果阻塞,则最多阻塞时长
      • get(block=True, timeout=None)
        • 取出队列数据
      • task_done()
      • join()

multiprocessing 模块

  • multiprocessing主要为多进程处理模块,与多线程的区别可参考
  • 多线程适合I/O密集型,多进程更适合计算密集型

  • Process类
    • Process的使用方法和threading.Thread类基本相同,前者实现多进程。主要方法简写如下:
      • Process([target [, name [, args [, kwargs]]]])
        • target: 要执行的方法;
        • name: 进程名;
        • args/kwargs: 要传入方法的参数。
      • 实例方法:
        • is_alive():返回进程是否在运行。
        • join([timeout]):阻塞当前上下文环境的进程程,直到调用此方法的进程终止或到达指定的timeout(可选参数)。
        • start():进程准备就绪,等待CPU调度。
        • run():strat()调用run方法,如果实例进程时未制定传入target,这star执行t默认run()方法。
        • terminate():不管任务是否完成,立即停止工作进程。
      • 属性:
        • daemon:和线程的setDeamon功能一样(将父进程设置为守护进程,当父进程结束时,子进程也结束)。
        • exitcode(进程在运行时为None、如果为–N,表示被信号N结束)。
        • name:进程名字。
        • pid:进程号。
  • Queue类
    • 和上述Queue模块使用方法基本类似
    • 只适用于Process类
  • Pool类
    • 待更新

转载于:https://www.cnblogs.com/liushi-Oscar/p/9639768.html

你可能感兴趣的文章
.NET中使用Memcached的相关资源整理(转)
查看>>
模型评估:精确率与召回率
查看>>
Java学习笔记(三)——静态导入,package-info,Fall-through
查看>>
51nod 1836:战忽局的手段(期望)
查看>>
java.sql.SQLException: Before start of result set
查看>>
SpringCloud——简介,5大组件
查看>>
如何让360、遨游、猎豹等双核浏览器默认以webkit内核渲染网页?
查看>>
windows下如何快速优雅的使用python的科学计算库?
查看>>
判断某一年是否为闰年
查看>>
Linux环境实现python远程可视编程
查看>>
【2017-12-09】c#基础-普通集合、泛型集合、哈希表集合、字典集合、队列集合、栈桥集合...
查看>>
android学习从模仿开始 —— 模仿UI 导航帖
查看>>
nginx优化 实现10万并发访问量
查看>>
IOS--时间 NSDate,NSTimeInterval的一些转换
查看>>
C语言- for 语句
查看>>
对Servlet请求或响应进行JMockit测试
查看>>
iOS---iPad开发及iPad特有的特技
查看>>
关于enum类型的本地化的一种方法探索:
查看>>
(转)625某电商网站数据库宕机故障解决实录(上,下)
查看>>
HDU3344(小广搜+小暴力
查看>>