Python3 decorator template thread decorator, timing decorator

Acerca de los decoradores:

    En términos de función, similar a los filtros e interceptores, agregue algo de lógica personalizada antes y después de la ejecución de la función original.

    En términos de implementación, la función original se pasa en los parámetros del decorador y el decorador controla la ejecución de la función original. 

    En términos de uso, agregue el nombre de la función @ decorator al encabezado de la función original como una anotación java.

 

 

Escritura del decorador:

(1) Thread Mode_Change: Es una estructura de tres capas en la que el decorador contiene parámetros de entrada adicionales; cuando se usa, debe haber (), @thread mode_ 改 ()

(2) Modo hilo: el decorador no requiere parámetros de entrada adicionales, estructura de dos capas; no hay () cuando se usa, modo @ hilo

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

 

 

Ejemplo:

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

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

 

 

Decorador de hilos, decorador de tiempos

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


Categoría de puntos y sincronización: https://blog.csdn.net/u013595395/article/details/108763819

Supongo que te gusta

Origin blog.csdn.net/u013595395/article/details/113007906
Recomendado
Clasificación