python3多线程进度条_python,多线程_Python:在多线程中使用进度条(progressbar)碰到的问题,python,多线程 - phpStudy...

Python:在多线程中使用进度条(progressbar)碰到的问题

Python线程池代码

# !/usr/bin/env python

# -*- coding:utf-8 -*-

# ref_blog:http://www.open-open.com/home/space-5679-do-blog-id-3247.html

import Queue

import threading

import time

class WorkManager(object):

def __init__(self, work_num=1000,thread_num=2):

self.work_queue = Queue.Queue()

self.threads = []

self.__init_work_queue(work_num)

self.__init_thread_pool(thread_num)

"""

初始化线程

"""

def __init_thread_pool(self,thread_num):

for i in range(thread_num):

self.threads.append(Work(self.work_queue))

"""

初始化工作队列

"""

def __init_work_queue(self, jobs_num):

for i in range(jobs_num):

self.add_job(do_job, i)

"""

添加一项工作入队

"""

def add_job(self, func, *args):

self.work_queue.put((func, list(args)))#任务入队,Queue内部实现了同步机制

"""

检查剩余队列任务

"""

def check_queue(self):

return self.work_queue.qsize()

"""

等待所有线程运行完毕

"""

def wait_allcomplete(self):

for item in self.threads:

if item.isAlive():item.join()

class Work(threading.Thread):

def __init__(self, work_queue):

threading.Thread.__init__(self)

self.work_queue = work_queue

self.start()

def run(self):

#死循环,从而让创建的线程在一定条件下关闭退出

while True:

try:

do, args = self.work_queue.get(block=False)#任务异步出队,Queue内部实现了同步机制

do(args)

self.work_queue.task_done()#通知系统任务完成

except Exception,e:

print str(e)

break

#具体要做的任务

def do_job(args):

print args

time.sleep(0.1)#模拟处理时间

print threading.current_thread(), list(args)

if __name__ == '__main__':

start = time.time()

work_manager = WorkManager(10, 2)

work_manager.wait_allcomplete()

end = time.time()

print "cost all time: %s" % (end-start)

这里,我使用的官网的progressbar组件,打算在多线程中进行使用。

主要方法和属性如下:

currval: current value of the progress, 0 <= currval <= maxval

maxval: maximum (and final) value of the progress

finished: True if the bar is have finished (reached 100%), False o/w

start_time: first time update() method of ProgressBar was called

seconds_elapsed: seconds elapsed since start_time

percentage(): percentage of the progress (this is a method)

我打算在wait_allcomplete()函数中进行修改

def wait_for_complete( self ):

for item in self.threads:

if item.isAlive():

item.join()

pbar = ProgressBar(maxval = len(self.threads))

pbar.start()#开始显示进度条

step = 0

i=0

while True:

for td in self.threads:

if td.isAlive() == False:

step += 1

pbar.update(step)#进度更新

pbar.finish()

主要思路就是:当有一个线程退出的时候就更新下进度条,但执行的时候,以上代码没能达到预期。

希望大家帮忙看下问题出在哪里

相关阅读:

有哪些值得学习的模块化的js源码

javascript变量预解析与函数声明提前

AFN Code=-1011 "Request failed: internal server error (500)

javascript 数组和类数组 有什么区别

对已经封装的方法进行进一步封装

我现在做了个SDK,里面有个Service,但是我其他应用引用的时候每个都会启动,怎么让各个应用共用一个service

C++程序报错non-standard syntax

未读消息永远为1

webrtc服务端录像保存?

nginx对特别的url实现https

PHP:正则表达式匹配任意类型的网址

MySQL多表多字段计算排序

线上mysql主从服务器切换binlog_format

关于jQuery和DOM之间的问题

动态更新ckeditor中元素内容?

polymer与Angular搭配使用问题

preg_match('/^[-0-9a-z]+$/i',$token),检查的一个token由数字和英文字母不区分大小写还有连接符-组成

Switch语句比起if else语句有哪些优势?

解决intellij 插件安装失败?

在数据库设计中,无论如何也该设计一个自增ID字段作为主键吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值