python3デコレータテンプレートスレッドデコレータ、タイミングデコレータ

デコレータについて:

    関数に関しては、フィルターやインターセプターと同様に、元の関数の実行の前後にカスタムロジックを追加します。

    実装に関しては、元の関数がデコレータパラメータで渡され、デコレータが元の関数の実行を制御します。 

    使用法に関しては、Javaアノテーションのように@デコレータ関数名を元の関数ヘッダーに追加します。

 

 

デコレータの書き込み:

(1)スレッドMode_Change:デコレータに追加の入力パラメータが含まれる3層構造です。使用する場合は、()、@ thread mode_改()が必要です。

(2)スレッドモード:デコレータは追加の入力パラメータを必要としない、2層構造、使用時に()はありません、@ threadモード

import threading
from concurrent import futures
from functools import wraps


# region 线程
# -- 关于初始化区,扫描到几个@就执行几次

__线程池_装饰专用 = futures.ThreadPoolExecutor(12)

def 线程模式_改(is_VIP = False, VIP_name = None):  # 这里的参数,是给装饰器的参数
    # region 装饰器的初始化区1
    # endregion
    def wrap(func):
        # region 装饰器的初始化区3
        # endregion
        @wraps(func)  # 复制原始函数信息,并保留下来
        def inner(*args, **kwargs):  # args和kwargs,是原始函数的参数;args是元祖,kwargs是字典

            # region 执行原始函数前
            # endregion

            if is_VIP:
                rst = threading.Thread(target=func, name=VIP_name, args=args, kwargs=kwargs)
                rst.start()
            else:
                rst = __线程池_装饰专用.submit(func, *args, **kwargs)  # 执行原始函数

            # region 执行原始函数后
            # endregion

            return rst
        # region 装饰器的初始化区4
        # endregion
        return inner
    # region 装饰器的初始化区2
    # endregion
    return wrap


def 线程模式(func):
    # region 装饰器的初始化区3
    # endregion
    @wraps(func)  # 复制原始函数信息,并保留下来
    def inner(*args, **kwargs):  # args和kwargs,是原始函数的参数;args是元祖,kwargs是字典

        # region 执行原始函数前
        # endregion

        rst = __线程池_装饰专用.submit(func, *args, **kwargs)  # 执行原始函数

        # region 执行原始函数后
        # endregion

        return rst
    # region 装饰器的初始化区4
    # endregion
    return inner

# endregion

 

 

例:

@线程模式
@打点计时
def a1(s = None):
    for i in range(5):
        time.sleep(1)
        print_加锁(s)

for i in range(10):
    a1(i)

 

 

スレッドデコレータ、タイミングデコレータ

import threading
from concurrent import futures
from functools import wraps


__lock_print = threading.Lock()

def print_加锁(*args, **kwargs):
    with __lock_print:
        print(*args, **kwargs)


# region 计时
def 打点计时(func):
    @wraps(func)  # 复制原始函数信息,并保留下来
    def inner(*args, **kwargs):  # args和kwargs,是原始函数的参数;args是元祖,kwargs是字典

        # region 执行原始函数前
        计时器 = 打点计时类.实例化()
        计时器.打点()
        # endregion

        rst = func(*args, **kwargs)  # 执行原始函数

        # region 执行原始函数后
        计时器.打点()
        print_加锁(f'''{func.__name__}: {计时器.计时()}''')
        # endregion

        return rst

    return inner
# endregion


# region 线程

__线程池_装饰专用 = futures.ThreadPoolExecutor(12)

def 线程模式_改(is_VIP = False, VIP_name = None):  # 这里的参数,是给装饰器的参数
    # region 装饰器的初始化区1
    # endregion
    def wrap(func):
        # region 装饰器的初始化区3
        # endregion
        @wraps(func)  # 复制原始函数信息,并保留下来
        def inner(*args, **kwargs):  # args和kwargs,是原始函数的参数;args是元祖,kwargs是字典

            # region 执行原始函数前
            # endregion

            if is_VIP:
                rst = threading.Thread(target=func, name=VIP_name, args=args, kwargs=kwargs)
                rst.start()
            else:
                rst = __线程池_装饰专用.submit(func, *args, **kwargs)  # 执行原始函数

            # region 执行原始函数后
            # endregion

            return rst
        # region 装饰器的初始化区4
        # endregion
        return inner
    # region 装饰器的初始化区2
    # endregion
    return wrap


def 线程模式(func):
    # region 装饰器的初始化区3
    # endregion
    @wraps(func)  # 复制原始函数信息,并保留下来
    def inner(*args, **kwargs):  # args和kwargs,是原始函数的参数;args是元祖,kwargs是字典

        # region 执行原始函数前
        # endregion

        rst = __线程池_装饰专用.submit(func, *args, **kwargs)  # 执行原始函数

        # region 执行原始函数后
        # endregion

        return rst
    # region 装饰器的初始化区4
    # endregion
    return inner

# endregion


ドットとタイミングのカテゴリ:https://blog.csdn.net/u013595395/article/details/108763819

おすすめ

転載: blog.csdn.net/u013595395/article/details/113007906