python-可重复利用的线程



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):   # 只有run里的才是子线程执行的
        while True:
            func, args, kwargs = self.queue.get()  # 从队列当中获取任务
            func(*args, **kwargs)
            self.queue.task_done()

    def apply_async(self, func, args=(), kwargs={}):
        self.queue.put((func, args, kwargs))

    def join(self, timeout=None):    # 等待所有提交的任务执行完毕
        self.queue.join()        # 解阻塞

def print_one():
    print('111111111')

def print_two():
    print('222222222222')


if __name__ == '__main__':
    t = MyThread()
    t.apply_async(print_one)
    t.apply_async(print_two, args=(1,2), kwargs={"a":1,'b':2})

    t.join()   # 线程的join   等待队列结束




文章作者: 剑胆琴心
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 剑胆琴心 !
评论
 上一篇
python-简单的线程池的实现 python-简单的线程池的实现
# 多进程服务器 创建 销毁 # 通过提前创建好线程 当任务来了 就分配线程去执行 """ 主线程: 相当于生产者,只管向线程池提交任务。 并不关心线程池是如何执行任务的。
2020-02-24
下一篇 
Python之Scapy Python之Scapy
关于Scapy是一个Python程序,使用户能够发送,嗅探和剖析并伪造网络数据包。此功能允许构建可以探测,扫描或攻击网络的工具。 换句话说,Scapy是一个功能强大的交互式数据包操作程序。它能够伪造或解码大量协议的数据包,通过线路发送,捕获
2020-02-23
  目录