美文网首页python
python自写线程池

python自写线程池

作者: 菠萝头咯 | 来源:发表于2021-07-08 23:09 被阅读0次

    由于python自带的线程池方法不好用,主要呈现缺点2点
    1.线程池无法通过手段进行停止
    2.没有线程守护,导致程序已经关闭了,线程池还在运行。
    故以上原因自写了一个类似线程池的类

    定义线程池类

    def action(max):
        my_sum = 0
        time.sleep(1)
        print(threading.current_thread().name +"   "+ str(max))
        return 1
    
    class MyThreadPool():
        def __init__(self, workNum):
            self.tasks = []
            self.workNum = workNum
            self.exitFlag = 0
    
        def execute(self):
            for i in range(0,len(self.tasks),self.workNum):
                if(self.workNum>len(self.tasks)):#如果任务数小于你设定的线程数,那就直接定义线程数为任务数
                    worknum = len(self.tasks)
                else:
                    worknum = self.workNum
                ts = []
                for k in range(worknum):
                    if(self.exitFlag):
                        print("线程池退出子线程")
                        break
                    if(i+k<len(self.tasks)):
                        t = threading.Thread(target=self.tasks[i+k]["func"],args=self.tasks[i+k]["args"],daemon=True)
                        t.start()
                        ts.append(t)
                for t in ts:
                    t.join()
                if(self.exitFlag):
                    print("线程池退出")
                    break
            self.tasks = []#任务执行完清空任务
        def shutDown(self):#可在程序运行中 调用此方法中断线程池
            self.exitFlag = 1
    
        def submit(self,func,args=()):
            func = {"func":func,"args":args}
            self.tasks.append(func)
    
    
    if __name__=='__main__':
        pool = myThreadPool(3)#定义3个线程的线程池
        for i in range(15):#提交15个任务
            pool.submit(action,args=(i,))
        pool.execute()#执行提交的任务
    
    

    相关文章

      网友评论

        本文标题:python自写线程池

        本文链接:https://www.haomeiwen.com/subject/whdxpltx.html