A5下载 - 努力做内容最丰富最安全的下载站!

A5站长下载站

当前位置:A5下载 > 源码技巧 > 父类数据 > python实现线程池的方法

python实现线程池的方法

时间:2015-06-30 11:27作者:zhao人气:38

本文实例讲述了python实现线程池的方法。分享给大家供大家参考。具体如下:

原理:建立一个任务队列,然多个线程都从这个任务队列中取出任务然后执行,当然任务队列要加锁,详细请看代码

文件名:thrd_pool.py 系统环境:ubuntu linux & python2.6

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

执行结果:

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程序设计有所帮助。

标签python,实现,线程,方法,本文,实例,讲述了,pyth

相关下载

查看所有评论+

网友评论

网友
您的评论需要经过审核才能显示

公众号