Python thread pool method, python Thread Pool
This example describes how to implement a thread pool in python. Share it with you for your reference. The details are as follows:
Principle: create a task queue. Multiple Threads extract the task from the task queue and execute it. Of course, the task queue needs to be locked. For details, see the code.
File Name: thrd_pool.py system environment: ubuntu linux & python2.6
import threadingimport timeimport signalimport osclass task_info(object): def __init__(self): self.func = None self.parm0 = None self.parm1 = None self.parm2 = Noneclass 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 ticlass 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
Execution method: python thrd_pool.py
Execution result:
count:0, thrd_name:Thread-1count:1, thrd_name:Thread-2count:2, thrd_name:Thread-3count:3, thrd_name:Thread-4count:4, thrd_name:Thread-5count:5, thrd_name:Thread-1count:6, thrd_name:Thread-6count:7, thrd_name:Thread-2count:8, thrd_name:Thread-3count:9, thrd_name:Thread-4count:10, thrd_name:Thread-5count:11, thrd_name:Thread-1count:12, thrd_name:Thread-6count:13, thrd_name:Thread-2count:14, thrd_name:Thread-3('Oops! Got signal %s', 15)
I hope this article will help you with Python programming.