import queue

import threading

class Consumer(threading.Thread):

def __init__(self, queue):

threading.Thread.__init__(self)

self.queue = queue

def run(self):

while True:

job = self.queue.get()

self.do_task(job)

# 如在这里加上

# If self.queue.empty():

# break

def do_task(self, task):

print ('doing task{}'.format(task))

self.queue.task_done()

def producer(tasks):

mqueue = queue.Queue()

# populate queue with tasks

for task in tasks:

mqueue.put(task)

# create 6 threads and pass the queue as its argument

for i in range(6):

mythread = Consumer(mqueue)

mythread.daemon = True # 如把这句注释掉

mythread.start()

# wait for the queue to finish

mqueue.join()

print ('all tasks completed')

if __name__ == "__main__":

tasks = 'A B C D E F'.split()

producer(tasks)

关于这段代码中mythread.daemaon = True这句,书上解释大致是要创建一个守护线程池,以便所有的线程执行完以后可以把控制权交给main函数,要是把这行注释掉main函数就结束不了。如果没有创建守护线程就要自己跟踪所有的线程以在主程序退出前通知他们结束。

我把这行注释掉运行了一下发现确实结束不了,始终执行不到print('all tasks completed')这句。我就想是不是可以像书上说的一样自己跟踪子线程,让他结束。于是我就尝试在Consumer这个类的run函数里加了个一个判断,当队列为空时就跳出循环,一跑发现然而这并没有什么卵用……主程序还是不能执行完。

在此请教各位老师,我应该怎么控制子线程结束,以使主程序执行完,又或者说自己跟踪子线程是怎么个跟踪法?非常感谢!

python守护线程错误 退出子线程_请问用python里threading和queue模块来写多线程程序,子线程是如何结束的?...相关推荐

  1. 02 线程简介 多任务 多线程 普通方法调用和多线程 程序.进程.线程 Proces与Thread 核心概念

    线程简介 任务,进程,线程,多线程 多任务 多任务处理是指用户可以在同一时间内运行多个应用程序,每个应用程序被称作一个任务 多线程 原来是一条路,慢慢因为车太多了,道路堵塞,效率极低. 为了提高使用的 ...

  2. python中输入的字怎么表示_简单讲解Python中的字符串与字符串的输入输出

    字符串字符串用''或者""括起来,如果字符串内部有'或者",需要使用\进行转义 >>> print 'I\'m ok.' I'm ok. 转义字符\可以 ...

  3. JAVA程序中怎么看线程的个数_一个文件中有10000个数,用Java实现一个多线程程序将这...

    18 推荐 运行结果: 编辑于 2015-07-16 17:20:57 回复(11) 12 自己重写了一下推荐答案,加了些注释方便理解 package threadpackage; import ja ...

  4. 下列关于python的描述正确的是-下列关于Python的说法,错误的是()。_学小易找答案...

    [单选题]下列关于Python的说法,错误的是(). [多选题]使用积分表求不定积分常见的类型有哪些? [简答题]请举例说明分数的意义. [简答题]代码的人工审查要审查哪些主要内容?为什么需要对代码进 ...

  5. python n个list如何组成矩阵_学完Python,我决定熬夜整理这篇总结...

    来源:http://suo.im/5wzRqt 前言:学完Python,我决定熬夜整理这篇总结- 一.了解Python Python之父 Guido Van Rossum,一位荷兰程序员,在1989年 ...

  6. python正则匹配找到所有的浮点数_如何利用Python抓取静态网站及其内部资源

    遇到的需求 前段时间需要快速做个静态展示页面,要求是响应式和较美观.由于时间较短,自己动手写的话也有点麻烦,所以就打算上网找现成的. 中途找到了几个页面发现不错,然后就开始思考怎么把页面给下载下来. ...

  7. python 监控文件夹存入的文件_文件夹 python

    Python如何搜索模块 在引入模块时,把库文件和应用文件放在同一文件夹下,当在该文件夹下运行程序时,Python会自动在当前文件夹下搜索它想要引入的模块. 但Python还会到其它地方寻找库: (1 ...

  8. [转载] python判断字符串中包含某个字符串_干货分享| Python中最常用的字符串方法

    参考链接: Python中字符串string capitalize 字符串是字符序列.Python中内置的string类代表基于Unicode国际字符集的字符串.除了Python中常见的操作外,字符串 ...

  9. python爬取微信群聊内容_再不学Python 你就被同龄人甩开了吗?

    原创: 潘懿锟 唐佩瑶 清华大学(分数线,专业设置)清新时报 记者 | 潘懿锟 唐佩瑶 "会Python的人,工作都不会太差.追上同龄人,就趁现在!" 或许你已经对微信的广告推送感 ...

最新文章

  1. perl malformed JSON string, neither tag, array, object, number, string or atom, at character offset
  2. 综艺节目php灭灯_非诚勿扰php程序员 结果遭女嘉宾瞬间全灭灯
  3. 十一级指针实现百万qq号的增删查改以及排序写入
  4. MTD和 uboot中的bootargs 下属 mtdparts
  5. EasyUI -- Layout(布局)
  6. Mac屏幕常亮时间控制:Theine
  7. linux 中文 bterm fbterm 内核,Fbterm (简体中文)
  8. CAN FD 总线协议深度解析-简单易懂协议详解
  9. Internet Explorer无法打开internet站点文件.....操作终止
  10. Java时间戳与时间互相转换(含毫秒及秒转换方式)
  11. Android webview 清除历史访问记录
  12. 数据挖掘经典十大算法_条件熵、信息增益介绍
  13. H5+CSS实现三级菜单(包括水平、垂直菜单和网页架构)
  14. 一家之言:说说 JavaScript 计时器的工作原理
  15. 计算机内存die,你们说的美光E-DIE其实非常强(C9BJZ)
  16. 史上最全软件测试工程师常见的面试题总结(百度、oppo、中软国际、华为)
  17. 项目整体流程及各阶段主要任务
  18. MAC OS 苹果系统如何安装FileZilla上传程序
  19. 一个教务系统测试版 请参考
  20. OpenCV各种遥感指数计算

热门文章

  1. How to find all event handler list for a given event
  2. SAP ABAP实用技巧介绍系列之 ABAP XSLT apply_template keyword
  3. CRM_REPORT_RF_AUTH_OBJ_ORD_LP
  4. How is account image maintained in CRM rendered in Fiori
  5. MongoDB最简单的入门教程之一 环境搭建
  6. javabean反射改字段内容_java反射机制给实体类相同字段自动赋值实例
  7. java小数点默认定义_java求两个数后小数点默认无限长度
  8. linux tcp在传输数据的时候断网了_选择最合适的协议 让传输数据更灵敏
  9. vue实现多行数据提交_(Vue起步)3.Vue设计模式:MVVM模式
  10. matlab 自动处理数据,Matlab Remote IPC自动化数据处理