# !/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""
@author : v_jiaohaicheng@baidu.com
@des : 多线程装饰器,基于cup包内置线程池实现 默认内置最大线程数10
"""
from functools import wraps
from cup.util import ThreadPool
class DecorateMutithread(object):
"""
多线程装饰器(线程池实现)
"""
def __init__(self, maxthreads=10):
"""
初始化线程池
"""
self.pool = ThreadPool(minthreads=3, maxthreads=maxthreads, daemon_threads=True)
self.pool.start()
def callback(self, status, result):
"""
默认回调函数
:param status:
:param result:
:return:
"""
print(status, result)
def add_project(self):
"""
装饰器函数
:return:
"""
def decorate(func):
@wraps(func)
def wrapper(*args, **kwargs):
return self.pool.add_1job_with_callback(self.callback, func, *args, **kwargs)
return wrapper
return decorate
def get_pool_status(self):
"""
获取线程池状态
:return:
"""
return self.pool.get_stats()
def start_pool(self):
"""
开始 pool
:return:
"""
self.pool.start()
def close_pool(self):
"""
关闭 pool
:return:
"""
self.pool.stop()
使用方法
# 初始化(默认初始化时线程就启动了)
decm = DecorateMutithread()
# 使用下面的方式可以在当前类里自定义回调函数为 self_callback()
decm.callback = self.self_callback
# 在要启动线程处理的函数上使用 @decm.add_project() 进行装饰
# 例如:
@decm.add_project()
def thread_function():
"""
"""
# 最后记得关闭
decm.close_pool()