# -*- coding: UTF-8 -*-
"""
多线程同时读队列 总结:
1. 会阻塞
if self._jobq.qsize() > 0 进入逻辑,此时被其他线程把数据取完了, 在data = self._jobq.get() 阻塞
2. 需要学习锁使用 逻辑:
* 主线程提前往队列写好所有数据
* 子线程读取队列数据,没有就退出线程
"""
import Queue
import threading
import time
import random q = 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
break if __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: 6
end
doing 0 worktype 1
doing 1 worktype 0
doing 2 worktype 2
doing 3 worktype 1
doing 4 worktype 2
doing 5 worktype 0
0,end
阻塞 ...... '''

[b0028] python 归纳 (十三)_队列Queue在多线程中使用的更多相关文章

  1. [b0033] python 归纳 (十八)_队列Queue在多线程中使用(二)

    # -*- coding: UTF-8 -*- """ 多线程同时读队列 使用 join(), task_done() 逻辑: 3个子线程并发 从有6个数据的队列中取数据 ...

  2. [b0029] python 归纳 (十四)_队列Queue实现生产者消费者

    # -*- coding: UTF-8 -*- """ 多线程的生产者,消费者 使用队列Queue """ import Queue imp ...

  3. Python与数据结构[2] -> 队列/Queue[0] -> 数组队列的 Python 实现

    队列 / Queue 数组队列 数组队列是队列基于数组的一种实现,其实现类似于数组栈,是一种FIFO的线性数据结构. Queue: <--| 1 | 2 | 3 | 4 | 5 |<-- ...

  4. [b0018] python 归纳 (四)_运算符重载

    # -*- coding: UTF-8 -*- """ 测试运算符重载 加法 总结: python 运算符表达式其实都是调用 类中方法 __xxx__ + <--- ...

  5. BlockingQueue阻塞队列(解决多线程中数据安全问题 可用于抢票,秒杀)

    案例:一个线程类中 private static BlockingQueue<Map<String, String>> dataQueue = new LinkedBlocki ...

  6. [b0038] python 归纳 (二三)_多进程数据共享和同步_队列Queue

    1  队列读写 # -*- coding: utf-8 -*- """ 多进程 共享 队列 multiprocessing.Process 逻辑: 一个进程往队列写数据, ...

  7. python网络编程-线程队列queue

    一:线程queu作用 Python中,queue是线程间最常用的交换数据的形式. 队列两个作用:一个是解耦,一个是提高效率 二:语法 1)队列的类 class queue.Queue(maxsize= ...

  8. Python 第九篇:队列Queue、生产者消费者模型、(IO/异步IP/Select/Poll/Epool)、Mysql操作

    Mysql操作: grant select,insert,update,delete on *.* to root@"%" Identified by "123456&q ...

  9. Python爬虫(十三)_案例:使用XPath的爬虫

    本篇是使用XPath的案例,更多内容请参考:Python学习指南 案例:使用XPath的爬虫 现在我们用XPath来做一个简单的爬虫,我们尝试爬取某个贴吧里的所有帖子且将该帖子里每个楼层发布的图片下载 ...

随机推荐

  1. mapreduce shortest way out

    相关知识 最优路径算法是无向图中满足通路上所有顶点(除起点.终点外)各异,所有边也各异的通路.应用在公路运输中,可以提供起点和终点之间的最短路径,节省运输成本.可以大大提高交通运输效率. 本实验采用D ...

  2. Python只读取文本中文字符

    #coding=utf-8 import re with open('aaa.txt','r',encoding="utf-8") as f: #data = f.read().d ...

  3. Locust压测结果准确性验证

    最近闲着没事做,就重新研究了一下基于python语言的Locust性能测试框架 发现在压测的过程中,虽然设置了100并发,但是通过实际监控,完全看不到100并发压测的效果 通过代码AOP日志监控接口的 ...

  4. Octave计算数据

    设A=[1 2;3 4;5 6] B=[11 12;13 14;15 16] A.*B =     :对A以及B中的对应的元素进行相乘 11 24 39 56 75 96 A.^2 :对A中的每一个元 ...

  5. CQRS(Command and Query Responsibility Segregation)与EventSources实例

    CQRS The CQRS pattern and event sourcing are not mere simplistic solutions to the problems associate ...

  6. qtdomdocument找不到

  7. apache配置文件说明及一些指令

    httpd命令和apachectl命令 [root@localhost ~]# httpd -h Usage: httpd [-D name] [-d directory] [-f file] [-C ...

  8. Windows如何连接Linux(CentOS 7.x)的redis

    参考链接:https://www.cnblogs.com/wangyang0210/p/10244479.html

  9. Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3) E. Arson In Berland Forest 二分 前缀和

    E. Arson In Berland Forest The Berland Forest can be represented as an infinite cell plane. Every ce ...

  10. Mysql 免安装教程 百度云网盘有文件和word说明

    一 把文件解压到一个目录下 这是解压后的目录 将my.ini文件考进去 双击打开my.ini 找到这两行更改成自己的解压路径保存 右键此电脑属性 找到高级系统设置配置环境变量 新建—>变量值是解 ...