python 归纳 (十三)_队列Queue在多线程中使用

# -*- 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
阻塞 ......

‘‘‘

原文地址:https://www.cnblogs.com/sunzebo/p/9612339.html

时间: 2024-09-30 19:47:48

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

python 归纳 (十四)_队列Queue实现生产者消费者

# -*- coding: UTF-8 -*- """ 多线程的生产者,消费者 使用队列Queue """ import Queue import threading import time import random queue = Queue.Queue(3) # 创建3个大小的队列 class Producer(threading.Thread): """ 生产者,往队列中写数据 ""&qu

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

队列 / Queue 数组队列 数组队列是队列基于数组的一种实现,其实现类似于数组栈,是一种FIFO的线性数据结构. Queue: <--| 1 | 2 | 3 | 4 | 5 |<-- 下面将使用Python中的list来替代C语言中的数组实现数组队列的数据结构. Note: 这里的实现并没有像C语言中的申请一块固定大小的数组,手动的定制数组中队列的头尾位置,而是利用list的特性直接完成,因此较为简单. 数组队列的实现与数组栈的实现基本类似,同时入列和出列也十分简单,仅需要对数组进行操作即

python 归纳 (八)_多进程_基本使用

# -*- coding: UTF-8 -*- """ 测试进程使用 multiprocessing.Process 使用: 1. 准备一个函数<fun>,子进程要执行的代码放这里面 def run_proc(name,l_list) 2. 以函数名.tuple(函数参数1,函数参数2...),创建Process 对象 p = multiprocessing.Process(target=run_proc, args=(str(i),l) ) 3. 启动子进程,这

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

本篇是使用XPath的案例,更多内容请参考:Python学习指南 案例:使用XPath的爬虫 现在我们用XPath来做一个简单的爬虫,我们尝试爬取某个贴吧里的所有帖子且将该帖子里每个楼层发布的图片下载到本地. #-*- coding:utf-8 -*- #tieba_xpath.py """ 作用:本案例使用XPath做一个简单的爬虫,我们尝试爬去某个贴吧的所有帖子 """ import os import urllib2 import urll

python 归纳 (十一)_线程_threading.Thread

总结: 默认父线程跑完,子线程并不会马上退出,不像 thread.start_threadXXXX 父线程跑完了,并没有退出,一直在那里 线程启动速度很快,不占多少开销,不到1毫秒 代码: # -*- coding: utf-8 -*- """ 学习 并发 linux下执行 """ from threading import Thread from multiprocessing import Process import time import

『python』计算机视觉_经典目标检测算法中的几个概念

图像金字塔 1.在从cv2.resize中,传入参数时先列后行的 2.使用了python中的生成器,调用时使用for i in pyramid即可 3.scaleFactor是缩放因子,需要保证缩放后的图不小于最小尺寸,对应神经网络就是训练尺寸 '''图像金字塔''' def resize(img, scaleFactor): # cv2.resize先接收列后接收行,返回亦然 return cv2.resize(img, (int(img.shape[1] * (1/scaleFactor))

消息队列queue

一.queue 在多线程编程中,程序的解耦往往是一个麻烦的问题,以及在socket网络编程中也会有这样的问题.recv 和send之间,如果服务端有消息,问题需要发送给客户端,而那边的recv 被主程序占用,而使用多线程加 队列queue,我们就可以把消息发送到queue,而不用管对方怎么处理是否处理,同样对于服务端. 消息队列queue在多线程编程中是一个非常好用的模块. 1.1 几种不同的queue 先进先出:q1 = queue.Queue(maxsize= 0) # first in f

python 归纳 (十二)_并发队列Queue的使用

# -*- coding: UTF-8 -*- """ 学习队列 Queue 总结: 1. 队列可以设置大小,也可以无限大小 2. 空了,满了,读写时可以阻塞,也可以报错 3. 队列中可以存储不同的数据类型对象 4. 队列的实现大量用到 线程模块 threading ,说明适用多线程之间的数据共享操作 不确定是否适合多进程之间的数据共享操作 5. 队列的实现用到锁操作,acquire,release,wait,notify 不需要在个人代码中使用 使用: 1. 创建队列对象

python基础教程_学习笔记19:标准库:一些最爱——集合、堆和双端队列

标准库:一些最爱 集合.堆和双端队列 集合 集合Set类位于sets模块中. >>> range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> set(range(10)) set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 集合是由序列(或其他可迭代的对象)构建的.主要用于检查成员资格,因此,副本是被忽略的: >>> range(10)*2 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9