博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 归纳 (十三)_队列Queue在多线程中使用
阅读量:4450 次
发布时间:2019-06-07

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

# -*- coding: UTF-8 -*-"""多线程同时读队列总结:    1. 会阻塞      if self._jobq.qsize() > 0  进入逻辑,此时被其他线程把数据取完了, 在data = self._jobq.get() 阻塞    2. 需要学习锁使用逻辑:  * 主线程提前往队列写好所有数据  * 子线程读取队列数据,没有就退出线程"""import Queueimport threadingimport timeimport randomq = Queue.Queue(0) # 无限大小的队列NUM_WORKERS = 3    # 线程数量class MyThread(threading.Thread):    """从队列读取数据打印"""    def __init__(self,queue,worktype):       """        :param queue:     队列        :param worktype:  其他参数       """       threading.Thread.__init__(self)       self._jobq = queue       self._work_type = worktype    def run(self):       while True:           if self._jobq.qsize() > 0:                time.sleep(random.random() * 3)                # 获取队列数据                data = self._jobq.get()                print "doing",data," worktype ",self._work_type           else:               print "%d,end" % self._work_type               breakif __name__ == '__main__':    print "begin...."    # 往队列写数据    for i in range(NUM_WORKERS * 2):       q.put(i)    print "job qsize:",q.qsize()    # 启动线程    for x in range(NUM_WORKERS):       MyThread(q,x).start()    print "end"'''Out:begin....job qsize: 6enddoing 0  worktype  1doing 1  worktype  0doing 2  worktype  2doing 3  worktype  1doing 4  worktype  2doing 5  worktype  00,end阻塞 ......'''

 

转载于:https://www.cnblogs.com/sunzebo/p/9612339.html

你可能感兴趣的文章
iOS开发拓展篇——如何把项目托管到GitHub
查看>>
性能优化之数据库优化
查看>>
类的继承、菱形继承、派生、多态
查看>>
mysql约束
查看>>
javascript鼠标及键盘事件总结及案例
查看>>
mysql表之间的关系及级联操作
查看>>
mac 搭建virtualenv的那些坑
查看>>
多路复用IO模型
查看>>
并发、串行、并行及多道技术原理
查看>>
hashlib、pickle、hmac、logging模块使用
查看>>
javascript常用知识点总结
查看>>
2019秋招复习笔记--数据库基本操作
查看>>
2019秋招复习笔试--手写代码
查看>>
2019秋招复习笔记--智力题
查看>>
MySQL学习笔记
查看>>
2019秋招面试复习 项目重点提问
查看>>
面试题
查看>>
DS博客作业08-课程总结
查看>>
利用Python爬虫刷店铺微博等访问量最简单有效教程
查看>>
浅谈软件测试与墨菲定律
查看>>