python实现线程池
发布时间:2020-12-17 17:08:34 所属栏目:Python 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 python实现线程池 原理:建立一个任务队列,然多个线程都从这个任务队列中取出任务然后执行,当然任务队列要加锁,详细请看代码 import threadingimpo
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考
python实现线程池
原理:建立一个任务队列,然多个线程都从这个任务队列中取出任务然后执行,当然任务队列要加锁,详细请看代码 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 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |