python线程池处理文件和Queue

原创 2012年03月26日 19:47:22
#_*_encoding:utf-8_*_
import threading
import Queue
from DisposeXml import *

class ThreadPoolMgr():
    def __init__(self,work_queue,thread_num=2):
        self.threads=[]
        self.work_queue=work_queue
        self.init_threadpool(thread_num)
    
    def init_threadpool(self,thread_num):
        for i in range(thread_num):
            self.threads.append(Mythread(self.work_queue));
    
    def wait_allcomplete(self):
        for item in self.threads:
            if item.isAlive():
                item.join()
    
    
class Mythread(threading.Thread):
    def __init__(self,work_queue):
        threading.Thread.__init__(self)
        self.work_queue=work_queue
        self.start()
    
    def run(self):
        # 从任务队列中取任务,一直等到任务队列为空
        while not self.work_queue.empty():
            dir = self.work_queue.get()
            os.chdir(dir)
            self.disposeMetaXml=DisposeTableMetaXml(TableMetadataFileName)
            self.disposeMetaXml.Analysis_Metadata()
            if -1==self.disposeMetaXml.connect2Db():
                QMessageBox.about(self,u"失败",u"数据库连接失败")
            self.disposeMetaXml.QueryMysql()
            self.disposeMetaXml.remove_tmp_file()
        print self.getName(),' work queue is empty'
            
    
if __name__=='__main__':
    p=ThreadPoolMgr()
    p.wait_allcomplete()
    
    


python的Queue模块:  import Queue

默认构造的queue大小为0,当然也可以指定大小  myqueue = Queue.Queue(maxsize = 10)

入队  myqueue.put(T)  队列中可以放任何格式对象或者组合。 

调用队列对象的put()方法在队尾插入一个项目。put()有两个参数,第一个item为必需的,为插入项目的值;第二个block为可选参数,默认为1。如果队列当前为空且block为1,put()方法就使调用线程暂停,直到空出一个数据单元。如果block为0,put方法将引发Full异常。

出对 myqueue.get()

调用队列对象的get()方法从队头删除并返回一个项目。可选参数为block,默认为True。如果队列为空且block为True,get()就使调用线程暂停,直至有项目可用。如果队列为空且block为False,队列将引发Empty异常。

python queue模块有三种队列:
1、python queue模块的FIFO队列先进先出。
2、LIFO类似于堆。即先进后出。
3、还有一种是优先级队列级别越低越先出来。 


针对这三种队列分别有三个构造函数:
1、class Queue.Queue(maxsize) FIFO 
2、class Queue.LifoQueue(maxsize) LIFO 
3、class Queue.PriorityQueue(maxsize) 优先级队列 


介绍一下此包中的常用方法:


Queue.qsize() 返回队列的大小 
Queue.empty() 如果队列为空,返回True,反之False 
Queue.full() 如果队列满了,返回True,反之False
Queue.full 与 maxsize 大小对应 
Queue.get([block[, timeout]]) 获取队列,timeout等待时间 
Queue.get_nowait() 相当Queue.get(False)
非阻塞 Queue.put(item) 写入队列,timeout等待时间 
Queue.put_nowait(item) 相当Queue.put(item, False)
Queue.task_done() 在完成一项工作之后,Queue.task_done() 函数向任务已经完成的队列发送一个信号

Queue.join() 实际上意味着等到队列为空,再执行别的操作


明天详细介绍些python的线程。

Python多线程同步---文件读写控制

1、实现文件读写的文件ltz_schedule_times.py#! /usr/bin/env python #coding=utf-8 import osdef ReadTimes(): r...
  • will130
  • will130
  • 2016年01月28日 11:37
  • 7396

python线程池(threadpool)模块使用

最近碰到个问题,需要telnet登录上千台机器去取主机名;其中有用户名密码交互部分,有需要延迟的部分,大概一次登录一次到处理完要10s,1000台机器串行处理就需要1000×10s,差不多三个小时,这...
  • u013713010
  • u013713010
  • 2016年11月23日 14:52
  • 6091

python线程池(threadpool)模块使用

最近碰到个问题,需要telnet登录上千台机器去取主机名;其中有用户名密码交互部分,有需要延迟的部分,大概一次登录一次到处理完要10s,1000台机器串行处理就需要1000×10s,差不多三个小时,这...
  • u013713010
  • u013713010
  • 2016年11月23日 14:52
  • 6091

python 线程池threadpool之实现

上一节介绍了线程池threadpool的安装和使用,本节将主要介绍线程池工作的主要流程: (1)线程池的创建 (2)任务的创建 (3)任务的推送到线程池 (4)线程处理任务 (5)线程池的退...
  • hehe123456ZXC
  • hehe123456ZXC
  • 2016年08月20日 05:24
  • 5988

Python中的多线程threading和线程间消息队列queue学习笔记

python中实现多线程可以通过threading类。线程间同步则可以用queue类。至于python的进程间通信,暂时没有发现有类似linux ipc的模块可供使用,但是可以通过unix域套接字实现...
  • l1902090
  • l1902090
  • 2014年04月30日 17:15
  • 9755

进程/线程池/进程ID/进程间的通讯pipe/Queue/Manager/进程同步

# 1.线程和进程的区别? # 进程 -> 资源的集合 # 线程 -> 操作cpu的最小调度单位 # 进程和线程谁快? 无法比 # 进程至少包含一个线程,进程需要靠线程启动 # 线程之间内存...
  • qq_39106949
  • qq_39106949
  • 2017年07月12日 18:56
  • 49

android多线程开发线程池(Handler+Thread+Message(queue)+Cache)应用

androidxianc [size=1.8em]Handler+Runnable模式 我们先看一个并不是异步线程加载的例子,使用 Handler+Runnable模式。 这里为何不是新开线程的...
  • hkcjg999
  • hkcjg999
  • 2014年06月20日 10:56
  • 625

python入门之mysql、mongo、线程、线程池的使用

  • 2016年03月17日 10:36
  • 9KB
  • 下载

文件扫描处理程序,用到线程、线程池、模板设计模式、访问者模式、类的递归等知识

1、文件扫描任务线程 /** * */ package com.godway.filescanner; import java.io.File; import java.util...
  • cn_gaowei
  • cn_gaowei
  • 2012年01月11日 09:40
  • 1425

Python 线程池

  • 2012年08月11日 13:13
  • 4KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python线程池处理文件和Queue
举报原因:
原因补充:

(最多只允许输入30个字)