pyspider中every,config裝飾器的實(shí)現(xiàn)原理

import requests
import time
url = 'http://www.baidu.com'

# 不含參數(shù)的裝飾器,兩個(gè)套
def alltime(func):
    def wrapper(*args,**kwargs):
        start = time.time()
        content = func(*args,**kwargs)
        print(time.time() - start)
        return content
    return wrapper

@alltime
def request():
    content = requests.get(url)
    return content


# 含參數(shù)的裝飾器,三個(gè)套
def out(canshu):
    def cehi(func):
        def wrapper(*args,**kwargs):
            # 可以理解為閉包中的global,在內(nèi)部函數(shù)中修改外部函數(shù)的值
            nonlocal canshu
            while int(canshu) < 100:
                start= time.time()
                time.sleep(2)
                content = func(*args,**kwargs)
                print('本次用時(shí)%s' % (time.time()-start))
                canshu = int(canshu) + 1
                # 被裝飾的函數(shù)有返回值的情況下需要返回
                return content
        return wrapper
    return cehi

@out(canshu=30)
def xx():
    print(123)

xx()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容