本文实例讲述了python实现线程池的方法。分享给大家供大家参考。具体如下:
原理:建立一个任务队列,然多个线程都从这个任务队列中取出任务然后执行,当然任务队列要加锁,详细请看代码
文件名:thrd_pool.py 系统环境:ubuntu linux & python2.6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
import threading import time import signal import os class task_info( object ): def __init__( self ): self .func = None self .parm0 = None self .parm1 = None self .parm2 = None class task_list( object ): def __init__( self ): self .tl = [] self .mutex = threading.Lock() self .sem = threading.Semaphore( 0 ) def append( self , ti): self .mutex.acquire() self .tl.append(ti) self .mutex.release() self .sem.release() def fetch( self ): self .sem.acquire() self .mutex.acquire() ti = self .tl.pop( 0 ) self .mutex.release() return ti class thrd(threading.Thread): def __init__( self , tl): threading.Thread.__init__( self ) self .tl = tl def run( self ): while True : tsk = self .tl.fetch() tsk.func(tsk.parm0, tsk.parm1, tsk.parm2) class thrd_pool( object ): def __init__( self , thd_count, tl): self .thds = [] for i in range (thd_count): self .thds.append(thrd(tl)) def run( self ): for thd in self .thds: thd.start() def func(parm0 = None , parm1 = None , parm2 = None ): print 'count:%s, thrd_name:%s' % ( str (parm0), threading.currentThread().getName()) def cleanup(signo, stkframe): print ( 'Oops! Got signal %s' , signo) os._exit( 0 ) if __name__ = = '__main__' : signal.signal(signal.SIGINT, cleanup) signal.signal(signal.SIGQUIT, cleanup) signal.signal(signal.SIGTERM, cleanup) tl = task_list() tp = thrd_pool( 6 , tl) tp.run() count = 0 while True : ti = task_info() ti.parm0 = count ti.func = func tl.append(ti) count + = 1 time.sleep( 2 ) pass |
执行方式:python thrd_pool.py
执行结果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
count: 0 , thrd_name:Thread - 1 count: 1 , thrd_name:Thread - 2 count: 2 , thrd_name:Thread - 3 count: 3 , thrd_name:Thread - 4 count: 4 , thrd_name:Thread - 5 count: 5 , thrd_name:Thread - 1 count: 6 , thrd_name:Thread - 6 count: 7 , thrd_name:Thread - 2 count: 8 , thrd_name:Thread - 3 count: 9 , thrd_name:Thread - 4 count: 10 , thrd_name:Thread - 5 count: 11 , thrd_name:Thread - 1 count: 12 , thrd_name:Thread - 6 count: 13 , thrd_name:Thread - 2 count: 14 , thrd_name:Thread - 3 ( 'Oops! Got signal %s' , 15 ) |
希望本文所述对大家的Python程序设计有所帮助。