并发编程--进程池与线程池-练习1 编辑
""" 实现线程的反复调用 用一个线程执行多个任务 """ import threading import queue class MyThread(threading.Thread): """ 通过一些方法实现线程的反复调用 """ def __init__(self): super().__init__() self.queue = queue.Queue() # 实例化队列 self.daemon = True # # 设置为守护线程,随着主线程结束而结束 self.start() # 开启线程,让线程在实例时就开启 def run(self): """ 通过while True实现反复调用的过程 让线程去调用 :return: """ while True: # 从对列中取出处理任务的函数及参数,然后调用处理逻辑 func, args, kwargs = self.queue.get() # 任务处理 func(*args, **kwargs) # 标识本次任务处理完毕,并通知queue.join self.queue.task_done() # 队列内部的计数器,每次执行任务,调用一次 def apply_async(self, func, args=(), kwargs={}): """ 接受待处理任务的函数及其参数,并传入到队列中 :param func: 待处理任务 :return: """ # 将待处理任务的函数及其参数存入到队列中 self.queue.put((func, args, kwargs)) def join(self, timeout=None): """ 等待队列中的任务处理完毕 :param timeout: :return: """ # 从task_done()中获取任务是否处理完毕 self.queue.join() def func1(): """ 待处理逻辑,需要线程去完成的任务 :return: """ print('Thread to do sth_1... ') def func2(): """ 待处理逻辑,需要线程去完成的任务 :return: """ print('Thread to do sth_2... ') def func3(): """ 待处理逻辑,需要线程去完成的任务 :return: """ print('Thread to do sth_3... ') if __name__ == '__main__': t = MyThread() # 实例一个线程 # 让线程t完成func1,func2,func3三个任务 t.apply_async(func1) t.apply_async(func2) t.apply_async(func2) t.join() # 等待任务结束
作者:温良Miner
出处:https://miners.cnblogs.com/
版权声明:本文为博主原创或转载文章,欢迎转载,但转载文章之后必须在文章页面明显位置注明出处,否则保留追究法律责任的权利。如您有任何疑问或者授权方面的协商,请 .
如果,您希望更容易地发现我的新文章,不妨点击一下绿色通道的【关注我】。
如果您觉得阅读本文对您有帮助,请点击一下右下方的推荐按钮,您的推荐将是我写作的最大动力!版权声明:本文为博主原创或转载文章,欢迎转载,但转载文章之后必须在文章页面明显位置注明出处,否则保留追究法律责任的权利。如您有任何疑问或者授权方面的协商,请 .
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次 .NET某固高运动卡测试 卡慢分析
· 微服务架构学习与思考:微服务拆分的原则
· 记一次 .NET某云HIS系统 CPU爆高分析
· 如果单表数据量大,只能考虑分库分表吗?
· 一文彻底搞懂 MCP:AI 大模型的标准化工具箱
· 博客园2025新款「AI繁忙」系列T恤上架
· 7 个最近很火的开源项目「GitHub 热点速览」
· 记一次 .NET某固高运动卡测试 卡慢分析
· DeepSeekV3:写代码很强了
· Avalonia跨平台实战(二),Avalonia相比WPF的便利合集(一)