最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python用yield from實(shí)現(xiàn)異步協(xié)程爬蟲(chóng)的實(shí)踐

 更新時(shí)間:2023年01月18日 10:35:47   作者:Python無(wú)霸哥  
本文主要介紹了Python用yield from實(shí)現(xiàn)異步協(xié)程爬蟲(chóng)的實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一、什么是yield

如果還沒(méi)有怎么用過(guò)的話,直接把yield看做成一種特殊的return(PS:本質(zhì) generator(生成器))
return是返回一個(gè)值然后就終斷函數(shù)了,而yield返回的是一個(gè)生成器(PS:不知道的直接看作特殊列表,看下面的代碼案例)

# -*- coding: utf-8 -*-
# @Time    : 2022/11/10 16:17
# @Author  : 紅后
# @Email   : not_enabled@163.com
# @blog    : https://www.cnblogs.com/Red-Sun
# @File    : 實(shí)例1.py
# @Software: PyCharm

def main():
    '''
    遍歷0到4,這五個(gè)數(shù),并分別打印
    '''
    for num in range(5):
        yield num

if __name__ == '__main__':
    for num in main():
        print(num)
    print('-'*50)
    for num in [0, 1, 2, 3, 4]:
        print(num)

在這里插入圖片描述

將它看作列表用for循環(huán)遍歷,就能取出其中的值。

二、yield于列表的區(qū)別

它與原來(lái)列表的區(qū)別就在于,自帶的列表是固定的,而把yield看作列表的話是動(dòng)態(tài)的。
具體案例描述請(qǐng)看代碼及備注(PS:個(gè)人自己描述的,有不對(duì)的地方望各位指點(diǎn))

# -*- coding: utf-8 -*-
# @Time    : 2023/01/11 15:24
# @Author  : 紅后
# @Email   : not_enabled@163.com
# @blog    : https://www.cnblogs.com/Red-Sun
# @File    : 實(shí)例2.py
# @Software: PyCharm

def main():
    '''
    將yield看作一個(gè)動(dòng)態(tài)列表,從yield左往右為傳出數(shù)據(jù),從又往左為傳入數(shù)據(jù)。
    PS:有yield存在的那一行,需要從左往右傳出數(shù)據(jù)跑一遍,數(shù)據(jù)出去以后又要從右往左帶接收的數(shù)據(jù)跑一遍,一共一行跑兩邊(僅作者個(gè)人記憶方法)
    '''
    Python學(xué)習(xí)群:748989764
    num1 = yield
    num2 = yield
    print(num1, num2)
    yield num1 + num2
if __name__ == '__main__':
    a = main()
    # 第一個(gè)next對(duì)應(yīng)第一個(gè)yield的右邊為空即None,所以動(dòng)態(tài)列表中加入一個(gè)參數(shù)為None,返回值為列表的-1位是None
    print(next(a))  # [None]
    # 第二個(gè)通過(guò)send方法傳入一個(gè)數(shù)1,即在上一次停止的地方從右往左傳入?yún)?shù),所以給num1賦值為1.然后繼續(xù)找下一個(gè)yield,其右邊的值依舊為None,加入動(dòng)態(tài)列表,此時(shí)返回值-1位依舊是None
    print(a.send(1))  # [None, None]
    # 第三通過(guò)send方法傳入一個(gè)數(shù)2,即在上一次停止的地方從右往左傳入?yún)?shù),所以給num2賦值為2.然后繼續(xù)找下一個(gè)yield,其右邊的值為num1 + num2,此時(shí)num1為1,num2為2,計(jì)算得返回值-1位為3
    print(a.send(2))  # [None, None, num1 + num2]

在這里插入圖片描述

三、yield from 實(shí)現(xiàn)協(xié)程

yield from 后面需要加可迭代對(duì)象
當(dāng)它后面加上生成器(上述所說(shuō)的yield這種)便可以實(shí)現(xiàn)生成的嵌套

  • 老板(主程序):調(diào)用委派生成器
  • 包工頭(委派生成器):包含yield from表達(dá)式的生成器
  • 打工仔(子生成器):生成器函數(shù)

其中委派生成器的作用:在主程序與子生成器之間建立一個(gè)雙向通道。
所謂雙向通道是指,主程序可以將參數(shù)通過(guò)send傳遞給子生成器,子生成器的yield的值也可以直接返回給主函數(shù)。(PS:委派生成器只有創(chuàng)建通道的作用,沒(méi)有攔截?cái)?shù)據(jù)這種功能)
也許有人會(huì)想直接用主程序調(diào)用子生成器不就行了,而對(duì)這的解釋是,使用yield from作為中間過(guò)渡是為了讓它幫我們進(jìn)行異常處理(PS:類似寫程序?yàn)榱苏_\(yùn)行加上try一個(gè)道理)

# -*- coding: utf-8 -*-
# @Time    : 2022/11/10 15:13
# @Author  : 紅后
# @Email   : not_enabled@163.com
# @blog    : https://www.cnblogs.com/Red-Sun
# @File    : coroutines.py
# @Software: PyCharm

import requests


def coroutines_spider():
    '''
    子生成器(PS: 打工仔,真正干活的)
    '''
    response = None  # 首次激活返回None,后期網(wǎng)頁(yè)響應(yīng)覆蓋
    while True:
        url = yield response
        response = requests.get(url)


def appoint():
    '''
    委派生成器,委托子生成器完成具體任務(wù) (PS: 類似包工頭負(fù)責(zé)勞務(wù)派遣)
    '''
    while True:
        yield from coroutines_spider()  # 建立子生成器和主函數(shù)的雙通道


def main(url_list: list):
    '''
    主函數(shù)(PS: 相當(dāng)于老板,張貼招人啟示)
    '''
    ul = appoint()  # 創(chuàng)建委派生成器
    next(ul)  # 激活它
    for url in url_list:
        response = ul.send(url)  # 將url作為參數(shù)傳遞進(jìn)入子生成器中,返回子生成器yield出來(lái)的response
        print(response.url, response.status_code)  # 打印出response中的鏈接和狀態(tài)碼


if __name__ == '__main__':
    url_list = ['https://www.baidu.com/', 'https://www.4399.com/', 'https://cn.bing.com/', ]
    main(url_list=url_list)


在這里插入圖片描述

到此這篇關(guān)于Python用yield from實(shí)現(xiàn)異步協(xié)程爬蟲(chóng)的實(shí)踐的文章就介紹到這了,更多相關(guān)Python yield from異步協(xié)程爬蟲(chóng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • PyCharm提示No Python Interpreter的正確解決辦法

    PyCharm提示No Python Interpreter的正確解決辦法

    剛學(xué)Python時(shí),拿到一個(gè)Python項(xiàng)目,想用pycharm打開(kāi)運(yùn)行卻報(bào)錯(cuò)了,這篇文章主要給大家介紹了關(guān)于PyCharm提示No Python Interpreter的正確解決辦法,需要的朋友可以參考下
    2023-10-10
  • Python3 利用requests 庫(kù)進(jìn)行post攜帶賬號(hào)密碼請(qǐng)求數(shù)據(jù)的方法

    Python3 利用requests 庫(kù)進(jìn)行post攜帶賬號(hào)密碼請(qǐng)求數(shù)據(jù)的方法

    今天小編就為大家分享一篇Python3 利用requests 庫(kù)進(jìn)行post攜帶賬號(hào)密碼請(qǐng)求數(shù)據(jù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • 分享15 超級(jí)好用得 Python 實(shí)用技巧

    分享15 超級(jí)好用得 Python 實(shí)用技巧

    這篇文章主要分享了15 超級(jí)好用得 Python 實(shí)用技巧,如果你對(duì)其中一個(gè)或多個(gè)感興趣,可以參考一下,希望對(duì)你能有所幫助
    2021-12-12
  • python實(shí)現(xiàn)網(wǎng)上購(gòu)物系統(tǒng)

    python實(shí)現(xiàn)網(wǎng)上購(gòu)物系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)網(wǎng)上購(gòu)物系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 基于Python編寫一個(gè)點(diǎn)名器的示例代碼

    基于Python編寫一個(gè)點(diǎn)名器的示例代碼

    想起小學(xué)的時(shí)候老師想點(diǎn)名找小伙伴回答問(wèn)題的時(shí)候,老師竟斥巨資買了個(gè)點(diǎn)名器。今日無(wú)聊便敲了敲小時(shí)候老師斥巨資買的點(diǎn)名器,希望對(duì)大家有幫助
    2022-07-07
  • python logging設(shè)置level失敗的解決方法

    python logging設(shè)置level失敗的解決方法

    今天小編就為大家分享一篇python logging設(shè)置level失敗的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • pytorch報(bào)錯(cuò)問(wèn)題:ValueError: num_samples should be a positive integer value, but got num_samples=0

    pytorch報(bào)錯(cuò)問(wèn)題:ValueError: num_samples should be

    這篇文章主要介紹了pytorch報(bào)錯(cuò)問(wèn)題:ValueError: num_samples should be a positive integer value, but got num_samples=0的解決方案,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 使用Python操作Jenkins的過(guò)程詳解

    使用Python操作Jenkins的過(guò)程詳解

    借助于Python中的python-jenkins模塊,我們可以輕松地編寫腳本來(lái)連接到Jenkins服務(wù)器,并執(zhí)行各種操作,如創(chuàng)建、刪除、構(gòu)建Jobs等,這種自動(dòng)化的方式不僅提高了效率,還使得CI/CD流程更加靈活和可控,本文介紹如何使用Python操作Jenkins的相關(guān)資料,需要的朋友可以參考下
    2024-05-05
  • 利用Python開(kāi)發(fā)Markdown表格結(jié)構(gòu)轉(zhuǎn)換為Excel工具

    利用Python開(kāi)發(fā)Markdown表格結(jié)構(gòu)轉(zhuǎn)換為Excel工具

    在數(shù)據(jù)管理和文檔編寫過(guò)程中,我們經(jīng)常使用 Markdown 來(lái)記錄表格數(shù)據(jù),但它沒(méi)有Excel使用方便,所以本文將使用Python編寫一個(gè)轉(zhuǎn)換工具,希望對(duì)大家有所幫助
    2025-03-03
  • python中l(wèi)xml庫(kù)之etree使用步驟詳解

    python中l(wèi)xml庫(kù)之etree使用步驟詳解

    這篇文章主要介紹了python中l(wèi)xml庫(kù)之etree使用的相關(guān)資料,lxml庫(kù)中的etree模塊提供了一個(gè)簡(jiǎn)單而靈活的API來(lái)解析和操作XML/HTML文檔,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-03-03

最新評(píng)論

嘉善县| 海阳市| 平南县| 中牟县| 沙坪坝区| 儋州市| 汽车| 庄河市| 渝北区| 长垣县| 黄山市| 民勤县| 监利县| 鄂托克前旗| 通榆县| 云龙县| 家居| 依兰县| 富锦市| 通渭县| 灵川县| 哈尔滨市| 灵丘县| 霞浦县| 奉新县| 资源县| 应城市| 垣曲县| 马山县| 广安市| 泾源县| 兴海县| 云安县| 武乡县| 遂平县| 准格尔旗| 庆安县| 汉阴县| 南川市| 陇川县| 柯坪县|