美文网首页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自写线程池

    由于python自带的线程池方法不好用,主要呈现缺点2点1.线程池无法通过手段进行停止2.没有线程守护,导致程序已...

  • python3 线程池和异常处理

    引用 线程池的基本使用as_completedwaitmap 线程池的异常处理 进程池用法 引用 Python中已...

  • python学习-线程、进程简洁使用

    python的线程池和进程池很pythonic 进程 from multiprocessing import Po...

  • 利用Python快速实现一个线程池,非常简单

    雷猴啊,兄弟们!今天来展示一下如何用Python快速实现一个线程池。 python实现一个线程池 一、序言[htt...

  • Python线程池

    mutilprocessing.dummy multiprocessing.dummy 模块与 multiproc...

  • python 线程池

    多线程的线程池有多重要就不多说了,现在开源的是一个线程池。此线程池的优点: 测试代码: @contextlib.c...

  • python 线程池

    pool实例对象有两个非常实用的方法

  • python线程池

    前段时间经常需要开多个线程完成任务,需要用到线程池,虽然Python自带了线程池的实现,但是有时候还是不太方便,后...

  • python线程池

    一、安装 安装命令pip install threadpool 运行结果: 可以看出,使用线程池后,运行速度有明显...

  • python线程池

    单线程执行该方法的结果

网友评论

    本文标题:python自写线程池

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