自定义线程池

线程池的自定义实现

 这里借用了线程和队列模块,写了一个线程类和线程池类

 1 import threading
 2 import queue
 3 import time
 4 class MyThread(threading.Thread):
 5 
 6     def __init__(self, queue):
 7         super().__init__()
 8         self.queue = queue
 9         self.daemon = True
10         self.start()
11 
12     def run(self):
13         while True:
14             func, args, kwargs = self.queue.get()  # 获取任务
15             func(*args, **kwargs)
16             self.queue.task_done()
17 
18     def join(self, timeout=None):
19         self.queue.join()
20 
21 
22 class MyPool(object):
23 
24     def __init__(self, num):
25         self.num = num
26         self.queue = queue.Queue()
27         for i in range(self.num):
28             MyThread(self.queue)
29 
30     def apply_async(self, func, args=(), kwargs={}):
31         self.queue.put((func, args, kwargs))
32 
33     def join(self):
34         self.queue.join()
35 
36 
37 def func1():
38     print(threading.current_thread().getName())
39     time.sleep(2)
40 if __name__ == '__main__':
41     start_time = time.time()
42     pool = MyPool(3)
43     for _ in range(4):
44         pool.apply_async(func1)
45     pool.join()
46     print(time.time() - start_time)
47 ############运行结果:###########
48 Thread-1
49 Thread-2
50 Thread-3
51 Thread-1
52 4.012118339538574

 

posted @ 2018-04-03 10:33  巴蜀秀才  阅读(217)  评论(0编辑  收藏  举报