FIFO是常用的队列,其一些常用的方法有:

    Queue.qsize()  返回队列大小

    Queue.empty()  判断队列是否为空

    Queue.full()  判断队列是否满了

    Queue.get([block[,timeout]])  从队列头删除并返回一个item,block默认为True,表示当队列为空却去get的时候会阻塞线程,等待直到有有item出现为止来get出这个item。如果是False的话表明当队列为空你却去get的时候,会引发异常。在block为True的情况下可以再设置timeout参数。表示当队列为空,get阻塞timeout指定的秒数之后还没有get到的话就引发Full异常。

    Queue.put(...[,block[,timeout]])  向队尾插入一个item,同样若block=True的话队列满时就阻塞等待有空位出来再put,block=False时引发异常。同get的timeout,put的timeout是在block为True的时候进行超时设置的参数。

    Queue.task_done()  从场景上来说,处理完一个get出来的item之后,调用task_done将向队列发出一个信号,表示本任务已经完成

    Queue.join()  监视所有item并阻塞主线程,直到所有item都调用了task_done之后主线程才继续向下执行。这么做的好处在于,假如一个线程开始处理最后一个任务,它从任务队列中拿走最后一个任务,此时任务队列就空了但最后那个线程还没处理完。当调用了join之后,主线程就不会因为队列空了而擅自结束,而是等待最后那个线程处理完成了。

线程退出可以设置标志位,使用队列获取数据的线程可以将queue.get设置阻塞超时。

一个简单的由队列获取数据的线程的如何退出的例子:

import queue
import sys
import threadingdef worker(name, q, exit_flag):while not exit_flag.is_set():try:# 超时控制,便于及时响应exit_flagitem = q.get(timeout=3)except queue.Empty:continueprint('thread {}, item {}'.format(name, item), file=sys.stderr)q.task_done()def main():# 线程退出标志位exit_flag = threading.Event()exit_flag.clear()# 创建共享队列和线程池q = queue.Queue()num_of_threads = 5 threads = [threading.Thread(target=worker, args=(str(i+1), q, exit_flag))for i in range(num_of_threads)]for t in threads:t.start()for i in range(50):q.put(i)q.join()# 任务处理完成,通知线程退出,并join等待exit_flag.set()for t in threads:t.join()if __name__ == '__main__':main()

python 线程退出方法相关推荐

  1. python线程退出_python子线程退出及线程退出控制的代码

    下面通过代码给大家介绍python子线程退出问题,具体内容如下所示: def thread_func(): while True: #do something #do something #do so ...

  2. python 线程退出_python线程退出

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 如果某线程并未使用很多 io 操作, 它会在自己的时间片内一直占用处理器(和 g ...

  3. python线程退出_python其中一个子线程,则退出全部线程,再退出进程

    原博文 2016-04-14 16:04 − import threading, signalis_exit = Falsedef write_login(self): global is_exit ...

  4. python线程join方法_Python多线程join()用法

    Python多线程与多进程中join()方法的效果是相同的. 下面仅以多线程为例: 首先需要明确几个概念: 知识点一:主进程结束,子进程继续执行 当一个进程启动之后,会默认产生一个主线程,因为线程是程 ...

  5. python线程退出或应用程序请求_Python 线程和进程

    前言 学编程,谁没有为线程折腾过啊. 目录 线程与进程 线程与进程是操作系统里面的术语,简单来讲,每一个应用程序都有一个自己的进程. 操作系统会为这些进程分配一些执行资源,例如内存空间等. 在进程中, ...

  6. python线程join方法

    前言: join方法的作用是同步线程. 1.不使用join方法: 当设置多个线程时,在一般情况下(无守护线程,setDeamon=False),多个线程同时启动,主线程执行完,会等待其他子线程执行完, ...

  7. python主程序退出方法quit()

    写一些几行的小程序时,要直接退出,却发现网上都是说 sys.exit(1) 或 os._exit(2) 之类的,但这些都要导入其他包,总感觉不爽.后面去 bing 上查一下,可以看到: quit() ...

  8. python主辅线程_python主线程捕获子线程的方法

    最近,在做一个项目时遇到的了一个问题,主线程无法捕获子线程中抛出的异常. 先看一个线程类的定义 ''''' Created on Oct 27, 2015 @author: wujz ''' impo ...

  9. python qthread 线程退出_线程:概念和实现

    翻译:老齐 译者注:与本文相关图书推荐:<Python大学实用教程><跟老齐学Python:轻松入门> ★ 本文将分两部分刊发. " 第一部分 Python线程允许程 ...

最新文章

  1. 算法学习的链接(持续更新)
  2. 免费Opengrok-代码阅读工具:Kernel,Optee,ATF,Uboot...
  3. 在Windows上编译最新版本的Hashcat
  4. 谈谈即时通讯开发平台
  5. web3@0.20.1 在依据abi创建智能合约的时候报错 TypeError: web3.eth.contract is not a function
  6. bzoj1532: [POI2005]Kos-Dicing
  7. 曲线曲面积分、重积分总结
  8. y7000p内存是一个16还是8+8_现货黄金创8年新高!黄金ETF年内净值增逾16%,买入还是离场?...
  9. 使用JUnit-4.11报java.lang.NoClassDefFoundError:
  10. unity挺好用的移动端相机控制器(Android和IPhone通用)
  11. PAT1018. Public Bike Management (30)
  12. 数据库1_五大主流数据库模型
  13. 《机械设计基础》题库
  14. 洛谷P4568飞行路线(分层图最短路)
  15. 甘肃省谷歌卫星地图下载
  16. 【Hello,互联网】百家争鸣的互联网时代
  17. windows10安装Python 3.xx.xx,勾选 Download debugging symbols或Download debug binari两项安装失败解决办法
  18. 华为#S系列交换机和E系列交换机基于IP网段配置限速
  19. [C#入门] 函数 | 方法
  20. 8.6 空间曲面及方程

热门文章

  1. 四川长虹IHO-3300AD_高安版_S905L3芯_精简优化_线刷固件包
  2. Using Sketch with Framer 使用Sketch与Framer Lynda课程中文字幕
  3. C语言链表怎么合并同类项,求一个关于合并同类项的编程
  4. vue地图单个打点定位
  5. JavaScript:实现Sudoku数独游戏算法(附完整源码)
  6. 去你的Google Adsence
  7. 图像配准,特征点提取与匹配
  8. 安信可ESP32-CAM摄像头开发demo--局域网拍照、实时视频、人脸识别
  9. 使用lightGBM进行验证的demo
  10. 项目管理之 项目阶段划分