quartz学习笔记6:多线程
来源:互联网 发布:mac帧ip类型数据长度 编辑:程序博客网 时间:2024/06/08 13:35
import Queueimport threadingimport sysimport timeimport urllib class ThreadPool: def __init__( self,num_of_threads=10): self.workQueue = Queue.Queue() #self.resultQueue = Queue.Queue() self.threads = [] self.__createThreadPool( num_of_threads ) def __createThreadPool( self, num_of_threads ): for i in range( num_of_threads ): #self.resultQueue thread = MyThread(self.workQueue) self.threads.append(thread) def wait_for_complete(self): #等待所有线程完成。 while len(self.threads): thread = self.threads.pop() #print thread.current_thread().name #等待线程结束 if thread.isAlive():#判断线程是否还存活来决定是否调用join thread.join() def add_job( self, func, *args, **kwargs ): self.workQueue.put((func,args,kwargs)) #替我们工作的线程池中的线程class MyThread(threading.Thread): # resultQueue, def __init__(self, workQueue, timeout=30, **kwargs): threading.Thread.__init__(self, kwargs=kwargs) #线程在结束前等待任务队列多长时间 self.timeout = timeout self.setDaemon(True) self.workQueue = workQueue #self.resultQueue = resultQueue self.start() def run(self): while True: try: #从工作队列中获取一个任务 func, args, kwargs = self.workQueue.get(timeout=self.timeout) #我们要执行的任务 res = func(args, kwargs) if self.workQueue.empty(): break #报任务返回的结果放在结果队列中 #self.resultQueue.put(res) except : print sys.exc_info() raise def test_job(id, sleep = 0.001 ): html = "" try: time.sleep(1) conn = urllib.urlopen('http://fucheng830.sinaapp.com/') html = conn.read(20) print html #print threading.current_thread(),id except: print sys.exc_info() return html def test(): print 'start testing' tp = ThreadPool(10) for i in range(50): time.sleep(0.2) tp.add_job( test_job, i, i*0.001 ) tp.wait_for_complete() #处理结果 #print 'result Queue\'s length == %d '% tp.resultQueue.qsize() #while tp.resultQueue.qsize(): # print tp.resultQueue.get() print 'end testing' if __name__ == '__main__': test()
阅读全文
0 0
- quartz学习笔记6:多线程
- Quartz 学习笔记
- Quartz ---学习笔记
- quartz 学习笔记
- Quartz学习笔记
- Quartz 学习笔记
- Quartz 概要学习笔记
- Quartz学习笔记
- quartz 学习笔记
- Quartz学习笔记
- Quartz学习笔记
- quartz 学习笔记 1
- quartz学习笔记-core
- Quartz学习笔记
- Quartz学习笔记1:Quartz概述
- quartz----学习笔记(补充)
- Quartz学习笔记(1)
- Quartz学习笔记(2)
- SVN分支管理
- (14)cookie细节
- 浅析TCP通信原理
- nginx中ssl模块
- 笨办法19函数和变量
- quartz学习笔记6:多线程
- JavaWeb项目中数据库存入数据中乱码的解决方案
- c++基础之随机函数
- 用ImageLoader查找图片继承Application
- unigui导出EXCEL使用NATIVEEXCEL
- 花式读取Android CPU使用率
- 2017 ACM/ICPC Asia Regional Shenyang Online 1004 array array array
- jzoj P2190 dis
- ImageLoader