并发编程--进程池与线程池-练习2 编辑
通过继承threading类,实现一个线程池
实现代码:
# coding = utf-8 ''' 自己实现一个线程池 ''' import time import queue import threading class MyThreadPool(object): def __init__(self, num): super().__init__() # self.daemon = True # 设置为守护线程 self.queue = queue.Queue() # 队列 # 给定线程池大小,并启动线程 for i in range(1, num+1): thread = threading.Thread(target=self.processing, name='thread_{}'.format(i), daemon=True) thread.start() def apply_async(self, func, args=(), kwargs={}): ''' 接收待处理任务函数及其参数,并将参数与函数保存到队列中,方便线程池处理 :param args: :param kwargs: :return: ''' self.queue.put((func, args, kwargs)) def processing(self): ''' 处理任务, 通过while循环,从队列中取出处理任务的函数及其对象参数,并调用 :return: ''' while True: try: func, args, kwargs = self.queue.get() func(*args, **kwargs) finally: # 标识此次处理任务结束 self.queue.task_done() def join(self): ''' 从task_done中确定队列是否为空,保证队列中的任务都已经完成 :return: ''' self.queue.join() def func1(): time.sleep(3) print('111') def func2(): time.sleep(3) print("222") def func3(): time.sleep(3) print('333') if __name__ == '__main__': # 实例化一个线程池 threads = MyThreadPool(2) # 任务处理 threads.apply_async(func1, args=(), kwargs={}) threads.apply_async(func2, args=(), kwargs={}) threads.apply_async(func3, args=(), kwargs={}) # 线程池结束 threads.join() print('任务结束')
作者:温良Miner
出处:https://miners.cnblogs.com/
版权声明:本文为博主原创或转载文章,欢迎转载,但转载文章之后必须在文章页面明显位置注明出处,否则保留追究法律责任的权利。如您有任何疑问或者授权方面的协商,请 .
如果,您希望更容易地发现我的新文章,不妨点击一下绿色通道的【关注我】。
如果您觉得阅读本文对您有帮助,请点击一下右下方的推荐按钮,您的推荐将是我写作的最大动力!版权声明:本文为博主原创或转载文章,欢迎转载,但转载文章之后必须在文章页面明显位置注明出处,否则保留追究法律责任的权利。如您有任何疑问或者授权方面的协商,请 .
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 从零开始开发一个 MCP Server!
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Ai满嘴顺口溜,想考研?浪费我几个小时
· Browser-use 详细介绍&使用文档