python3-线程原理


import queue
import threading
import time

que = queue.Queue()
def do_job():
    while True:
        #读取队列中的函数内容 赋值给i
        i = que.get()
        time.sleep(2)
        print(f'{i}---{threading.current_thread()}')     #处理队列中取出的数据  可以是函数    执行函数并传参就行
        que.task_done()    #函数退出后告诉队列取出的函数状态
if __name__ == '__main__':
    for i in range(3):   #启动了三个无限循环取队列的线程    队列为空 程序启动中会阻塞
        t=threading.Thread(target=do_job)   #启动一个线程
        t.daemon = True  #设置守护进程  如果主进程退出  线程也会跟着退出
        t.start()  #启动
    time.sleep(1)
    for i in range(10):
        que.put(i)  #向队列中导入数据
    que.join()  #等待队列中的所有线程执行完毕

https://juejin.cn/post/6844904058533183495

from threading import Thread
import queue
class ThreadManager(Thread):   #线程管理器:获取一个队列   根据定义循环get队列参数的方法
    def __init__(self,work_quene):
        Thread.__init__(self)   #继承Thread   初始化Thread  启动一个线程 启动几个  就实例化几个类
        self.work_quene = work_quene   #获取参数队列
        self.daemon = True    #设置守护进程   主进程退出   线程退出
    def run(self) -> None:   #启动run函数重写
        while True:
            target,args = self.work_quene.get()  #从队列中获取参数执行  没有数据会阻塞
            target(*args)
            self.work_quene.task_done()  #执行结束告诉队列减1
class ThreadPoolManager():  #初始化线程池类
    def __init__(self,thread_num):
        self.quene = queue.Queue()   #定义一个队列
        self.thread_num = thread_num  #定义一个变量  线程池数
        self.__init_threading_pool(self.thread_num)   #默认启动线程数的线程    循环初始化线程池线程的range参数
    def __init_threading_pool(self):   #启动的函数
        for i  in range(self.thread_num):
            thread = ThreadManager(self.quene)
            thread.start()  #调用run函数启动线程
    def add_job(self,func,*args):
        self.quene.put(func,args)  #向队列中添加线程
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值