zoukankan      html  css  js  c++  java
  • 重复利用的线程

    可以重复利用的线程

    # -*- coding: utf-8 -*-
    """ 线程重复使用 """
    
    from threading import Thread
    from queue import Queue
    
    
    def func(a, b, c):
        print('a')
    
    def func1(a, b):
        print('b')
    
    # 子线程
    class Mythread(Thread):
        def __init__(self):
            super().__init__()
            self.queue = Queue(3) # __init__在函数执行前运行,也就是在主线程执行的
            self.daemon = True # 设置为守护线程
    
        def run(self):
            while True:
                func, args, kwargs = self.queue.get()
                func(*args, **kwargs)
                self.queue.task_done() # 队列计数器 -1
    
        def apply_async(self, func, args=(), kwargs={}):
            self.queue.put((func, args, kwargs)) # 队列计数器 +1
            # print(self.queue.qsize())
    
        def join(self):
            self.queue.join() # 重写thread join方法,调用queue join
    
    
    
    if __name__ == "__main__":
        my_thread = Mythread()
        # 传参
        my_thread.apply_async(func, (1, 2, 3)) # 调用apply_async方法在主线程中执行  计数器 +1
        my_thread.apply_async(func1, (1, 2)) #   计数器 +2
        my_thread.start()
        my_thread.join()
        ''' 思路:设置为守护线程(主线程结束子线程就结束)。join方法在主线程调用使得主线程处于阻塞,
        一直到子线程中的计数器为0才解阻塞。此时主线程结束,子线程也结束 '''
  • 相关阅读:
    CSS的三种定位方式介绍(转载)
    CSS背景颜色透明
    去除网页滚动条的方法
    es6
    Android复习
    caculater
    字符流
    字节流
    File类
    泛型继承
  • 原文地址:https://www.cnblogs.com/tangpg/p/10638366.html
Copyright © 2011-2022 走看看