quartz学习笔记6:多线程

简介: quartz学习笔记6:多线程
import Queue
import threading
import sys
import time
import 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()
目录
相关文章
|
6月前
|
网络协议 Linux C++
Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程)
Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程)
136 0
|
1月前
|
编解码 数据安全/隐私保护 计算机视觉
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
如何使用OpenCV进行同步和异步操作来打开海康摄像头,并提供了相关的代码示例。
91 1
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
|
1月前
FFmpeg学习笔记(二):多线程rtsp推流和ffplay拉流操作,并储存为多路avi格式的视频
这篇博客主要介绍了如何使用FFmpeg进行多线程RTSP推流和ffplay拉流操作,以及如何将视频流保存为多路AVI格式的视频文件。
193 0
|
3月前
|
调度
多线程学习笔记
这篇文章是多线程学习笔记,涵盖了线程与进程的概念、多线程实现方式、线程状态、线程同步与不安全示例、死锁问题以及生产者与消费者问题等多线程编程的关键知识点。
多线程学习笔记
|
6月前
|
NoSQL 网络协议 关系型数据库
redis-学习笔记(redis 单线程模型)
redis-学习笔记(redis 单线程模型)
56 3
|
6月前
|
安全 Java 编译器
多线程 (下) - 学习笔记2
多线程 (下) - 学习笔记
46 1
|
6月前
|
存储 算法 Java
多线程 (下) - 学习笔记1
多线程 (下) - 学习笔记
47 1
|
6月前
|
设计模式 安全 NoSQL
多线程 (上) - 学习笔记2
多线程 (上) - 学习笔记
46 1
|
6月前
|
Java 数据库连接 程序员
【后台开发】TinyWebser学习笔记(2)线程池、数据库连接池
【后台开发】TinyWebser学习笔记(2)线程池、数据库连接池
69 4
|
6月前
多线程学习笔记(一)
创建线程有3种方式:继承Thread类、实现Runnable接口或Callable接口。继承Thread类时,重写run()方法并调用start()启动线程。实现Runnable接口时,实现run()方法,通过Thread的target创建线程对象并用start()启动。
30 1