您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

Python实现线程池代码分享

2025/11/14 2:19:03发布26次查看
原理:建立一个任务队列,然多个线程都从这个任务队列中取出任务然后执行,当然任务队列要加锁,详细请看代码
import threadingimport timeimport signalimport 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
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product