# -*- coding:utf-8 -*-
import Queue
import time
import threading # 需要执行的业务主体
def domain(id):
time.sleep(2)
print(id, "done") class update_proccess(threading.Thread):
def __init__(self,queue_list):
threading.Thread.__init__(self)
self.queue_list = queue_list def run(self):
while True:
try:
if self.queue_list.qsize() == 0:
break
print(u"surplus:",self.queue_list.qsize())
# 没隔1秒检测一下队列的长度,由此判断队列的执行情况
time.sleep(1)
except Queue.Empty:
break class myThread(threading.Thread):
def __init__(self, queue_list):
threading.Thread.__init__(self)
self.queue_list = queue_list def run(self):
while True:
try:
# 获取队列,获取时需要阻塞,不设置阻塞的话会一直去尝试获取资源
task = self.queue_list.get(block = True, timeout = 1)
except Queue.Empty:
break
# 取到数据,开始处理(依据需求加处理代码)
domain(task)
# 处理完主体业务代码后需要将该队列的资源释放
self.queue_list.task_done() # 创建指定长度的队列
queue_list = Queue.Queue(10) # 向资源池里面放10个数用作测试
for i in range(10):
queue_list.put(i) # 开Thread_num个线程
for i in range(0, 2):
worker = myThread(queue_list)
worker.start()
# 开启队列监控线程
update_proccess(queue_list).start() queue_list.join() #等待所有的队列资源都用完

通过Queue控制线程并发,并监控队列执行进度的更多相关文章

  1. CoreJava_线程并发(堵塞队列):在某个目录下搜索含有某keyword的文件

    Java多线程编程是很考验一个程序猿水平的. 传统的WEB程序中.由于框架提供了太多的健壮性.并发性.可靠性的支持,所以我们都是将全部的注意力放到了业务实现上.我们不过依照业务逻辑的要求.不停的积累自 ...

  2. 用Queue控制python多线程并发数量

    python多线程如果不进行并发数量控制,在启动线程数量多到一定程度后,会造成线程无法启动的错误. 下面介绍用Queue控制多线程并发数量的方法(python3). # -*- coding: utf ...

  3. Java编程的逻辑 (76) - 并发容器 - 各种队列

    ​本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...

  4. Java中怎么控制线程訪问资源的数量

    在API中是这样来描写叙述Semaphore 的 Semaphore 通经常使用于限制能够訪问某些资源(物理或逻辑的)的线程数目. 一个计数信号量.从概念上讲,信号量维护了一个许可集.如有必要,在许可 ...

  5. Java并发编程:4种线程池和缓冲队列BlockingQueue

    一. 线程池简介 1. 线程池的概念: 线程池就是首先创建一些线程,它们的集合称为线程池.使用线程池可以很好地提高性能,线程池在系统启动时即创建大量空闲的线程,程序将一个任务传给线程池,线程池就会启动 ...

  6. Java -- 使用阻塞队列(BlockingQueue)控制线程通信

    BlockingQueeu接口是Queue的子接口,但是它的主要作用并不是作为容器,而是作为线程同步的工具. 特征: 当生产者线程试图向BlockingQueue中放入元素时,如果该队列已满,则该线程 ...

  7. Python的并发并行[2] -> 队列[1] -> 使用队列进行任务控制

    使用队列进行任务控制 1 FIFO与LIFO队列 FIFO(First In First Out)与LIFO(Last In First Out)分别是两种队列形式,在FIFO中,满足先入先出的队列方 ...

  8. Python的并发并行[2] -> 队列[0] -> queue 模块

    queue 模块 / queue Module 1 常量 / Constants Pass 2 函数 / Function Pass 3 类 / Class 3.1 Queue类 类实例化:queue ...

  9. 基于线程池、消息队列和epoll模型实现并发服务器架构

    引言 并发是什么?企业在进行产品开发过程中为什么需要考虑这个问题?想象一下天猫的双11和京东的618活动,一秒的点击量就有几十万甚至上百万,这么多请求一下子涌入到服务器,服务器需要对这么多的请求逐个进 ...

随机推荐

  1. itextpdf5操作文本

    itextpdf使用document操作文本可以使用3个对象来做:Chunk.Phrase.Paragraph. itextpdf5的包对它们的介绍是这样的: chunk: 这是可以添加到文档中最小的 ...

  2. zabbix3.4配置第三方邮件报警

    废话不多说,直接进入主题. 1.安装mailx [root@localhost ~]#yum install malix -y                        #yum安装malix [ ...

  3. xadmin引入celery4.0执行异步任务与定时任务

    一.安装 pip install celery pip install django-celery-beat pip install django-celery-results pip install ...

  4. Django-Model操作数据库

    查询 models.UserInfo.objects.all() models.UserInfo.objects.all().values('user') #只取user列 models.UserIn ...

  5. 07-cmake语法-MATCHES

    如果给定的字串或变量值域给定的正则表达式匹配的话,表达式返回真. IF (CMAKE_SYSTEM_NAME MATCHES "Linux") MESSAGE(STATUS &qu ...

  6. pptpd pptpctrl[25553]: segfault at 0 ip 00007fb6fe23ebdc sp 00007ffdef6334e8 error 4 in libc-2.17.so[7fb6fe0dd000+1c2000] pptp拨号连接失败

      以下是一次记录pptpd vpn无法连接后的心酸历程: pptp client拨号发现一直无响应,查看日志   因为pptpd服务端是一台高质量公网地址,所以平时拨入vpn连接都非常快,今天发起拨 ...

  7. CLR Exception 0xE0434F4D和0xE0434352的区别

    <根据<CLR Exception---E0434352>和<CLR Exception---E0434F4D>这两篇随笔,我们会发现,这两个异常太相似了,除了代码值不一 ...

  8. T4模板 简单使用

    原文:https://www.cnblogs.com/sanduo8899/p/3964563.html <#@ template debug="false" hostspe ...

  9. 【转】AVL之C++实现

    AVL树的介绍 AVL树是高度平衡的而二叉树.它的特点是:AVL树中任何节点的两个子树的高度最大差别为1. 上面的两张图片,左边的是AVL树,它的任何节点的两个子树的高度差别都<=1:而右边的不 ...

  10. 【BZOJ4722】由乃

    [BZOJ4722]由乃 题面 bzoj 题解 考虑到区间长度为\(14\)时子集个数\(2^{14}>14\times 1000\),由抽屉原理,区间长度最多为\(13\)(长度大于这个值就一 ...