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才解阻塞。此时主线程结束,子线程也结束 '''
  • 相关阅读:
    Unix domain sockets
    python异常处理
    php注册登录源代码
    div,css命名规范!
    html、css和js注释的规范用法
    PHPstrom的Disable Power Save Mode
    开通了博客园
    O(1)时间删除链表中的节点 13
    打印1到最大的n位数 12
    自己实现一个数的整数次方 11
  • 原文地址:https://www.cnblogs.com/tangpg/p/10638366.html
Copyright © 2011-2022 走看看