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

python網(wǎng)絡(luò)爬蟲之協(xié)程的實現(xiàn)方法

 更新時間:2023年08月09日 11:37:07   作者:小維_  
這篇文章主要介紹了python網(wǎng)絡(luò)爬蟲之協(xié)程的實現(xiàn)方法,協(xié)程Coroutine又稱微線程,是一種用戶態(tài)內(nèi)的上下文切換技術(shù),簡而言之,就是通過一個線程實現(xiàn)代碼塊相互切換執(zhí)行,需要的朋友可以參考下

1.協(xié)程

協(xié)程(Coroutine):又稱微線程,是一種用戶態(tài)內(nèi)的上下文切換技術(shù)。

簡而言之,就是通過一個線程實現(xiàn)代碼塊相互切換執(zhí)行。

意義:在一個線程中如果遇到IO等待時間,線程不會傻傻等,會在空閑的時間再干其他事情。

一個線程,可以認(rèn)為是人為的控制線程在函數(shù)之間進(jìn)行線程切換,且僅有一個線程來完成切換。

實現(xiàn)協(xié)程的方法

  • greenlet 早期模塊
  • yield關(guān)鍵字  yield是python中的生成器
  • asyncio裝飾器(py3.4)
  • async、await關(guān)鍵字(py3.5)【推薦】

1.1greenlet實現(xiàn)協(xié)程

安裝:

pip install greenlet

# 1. greenlet實現(xiàn)協(xié)程
from greenlet import greenlet
def func1():
    print(1)    #第二步:輸出1
    gr2.swith()     #第三步:切換到func2函數(shù)
    print(2)    #第六步:輸出2
def func2():
    print(3)    #第四步:輸出3
    gr1.switch()    #第五步:切換到func1函數(shù)
    print(4)    #第七步:輸出4
gr1 = greenlet(func1())
gr2 = greenlet(func2())
gr1.switch()    #第一步:執(zhí)行func1函數(shù)

1.2 yield關(guān)鍵字實現(xiàn)協(xié)程

# 2. yield關(guān)鍵字 實現(xiàn)協(xié)程
def func1():    #如果一個函數(shù)中,存在yield關(guān)鍵字,則認(rèn)為是一個生成器,則執(zhí)行該函數(shù),就生成一個生成器
    yield 1     #第二步:輸出1
    yield from func2()  #第三步:表示跳到func2函數(shù)中
    yield 2     #第六步:輸出2
def func2():
    yield 3     #第四步:輸出3
    yield 4     #第五步:輸出4
f1 = func1()
for item in f1:
    print(item) #第一步:執(zhí)行func1函數(shù)

1.3 asyncio 實現(xiàn)協(xié)程

# 3. asyncio 實現(xiàn)協(xié)程【無需安裝,但要求python需3.4及以上版本】
# 注意:遇到IO阻塞自動切換
import asyncio
@asyncio.coroutine
def func1():    #func1位普通函數(shù),添加了asynic.coroutine裝飾器后,則認(rèn)為該函數(shù)為協(xié)程函數(shù)
    print(1)
    yield  from asyncio.sleep(2)  # 遇到IO耗時操作,自動切換到tasks中的其他任務(wù)
    print(2)
@asyncio.coroutine
def func2():
    print(3)
    yield  from asyncio.sleep(2)    # 遇到IO耗時操作,自動切換到tasks中的其他任務(wù)
    print(4)
#協(xié)程函數(shù)的執(zhí)行, 則無法使用func1()方法進(jìn)行執(zhí)行,需要以下的方法進(jìn)行執(zhí)行
# loop = asyncio.get_event_loop()
# loop.run_until_complete(函數(shù)名稱)  #使用以上代碼,執(zhí)行函數(shù)的協(xié)程操作 如:loop.run_until_complete(func())
#對func1和func2函數(shù)進(jìn)行封裝, 然后使用下面的4句代碼,在pyhton內(nèi)部,同時會執(zhí)行這兩個協(xié)程函數(shù),線程會隨機(jī)執(zhí)行所有函數(shù)中的一個
tasks = [
    asyncio.ensure_future(func1()),
    asyncio.ensure_future(func2())
]
# 線程函數(shù)會隨機(jī)執(zhí)行func1和func2協(xié)程函數(shù)
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))

假設(shè)首先執(zhí)行func1函數(shù),則在遇到 yield from asyncio.sleep(2),線程會跳轉(zhuǎn)到其他協(xié)程函數(shù)中,但因為該python文件中僅有2個協(xié)程函數(shù),

#因此,跳轉(zhuǎn)執(zhí)行func2函數(shù),而在func2函數(shù)中遇到y(tǒng)ield from asyncio.sleep(2),就又會跳轉(zhuǎn)到func1函數(shù)沖,輸出2,最后再到func2函數(shù)中,輸出4.結(jié)束本次操作

#本代碼輸出結(jié)果為: 1 3 2 4

1.4 asyn &await 實現(xiàn)協(xié)程

# 4. async & await關(guān)鍵字【推薦】  在python3.5及以上
import asyncio
async def func1():    #func1位普通函數(shù),添加了asynic.coroutine裝飾器后,則認(rèn)為該函數(shù)為協(xié)程函數(shù)
        print(1)
        await asyncio.sleep(2)  # 遇到IO耗時操作,自動切換到tasks中的其他任務(wù)
        print(2)
@asyncio.coroutine
async def func2():
        print(3)
        await asyncio.sleep(2)    # 遇到IO耗時操作,自動切換到tasks中的其他任務(wù)
        print(4)
#對func1和func2函數(shù)進(jìn)行封裝, 然后使用下面的4句代碼,在pyhton內(nèi)部,同時會執(zhí)行這兩個協(xié)程函數(shù),線程會隨機(jī)執(zhí)行所有函數(shù)中的一個
tasks = [
    asyncio.ensure_future(func1()),
    asyncio.ensure_future(func2())
]
# 線程函數(shù)會隨機(jī)執(zhí)行func1和func2協(xié)程函數(shù)
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))

#說明:asyncio和 async & await區(qū)別不大,只是將@asyncio.coroutine替換為 asyn ;將yield from 替成 await,其他的都沒變

到此這篇關(guān)于python網(wǎng)絡(luò)爬蟲之協(xié)程的實現(xiàn)方法的文章就介紹到這了,更多相關(guān)python網(wǎng)絡(luò)爬蟲之協(xié)程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python def函數(shù)的定義、使用及參數(shù)傳遞實現(xiàn)代碼

    Python def函數(shù)的定義、使用及參數(shù)傳遞實現(xiàn)代碼

    Python編程中對于某些需要重復(fù)調(diào)用的程序,可以使用函數(shù)進(jìn)行定義,在Python中使用def用來定義函數(shù),這里簡單分享下, 方便學(xué)習(xí)python的朋友
    2014-08-08
  • Pandas篩選DataFrame含有空值的數(shù)據(jù)行的實現(xiàn)

    Pandas篩選DataFrame含有空值的數(shù)據(jù)行的實現(xiàn)

    本文主要介紹了Pandas篩選DataFrame含有空值的數(shù)據(jù)行的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 四行Python3代碼實現(xiàn)圖片添加美顏效果

    四行Python3代碼實現(xiàn)圖片添加美顏效果

    這篇文章主要為大家介紹了如何利用Python語言實現(xiàn)給圖片添加美顏效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2022-04-04
  • Django使用 Bootstrap 樣式修改書籍列表過程解析

    Django使用 Bootstrap 樣式修改書籍列表過程解析

    這篇文章主要介紹了Django使用 Bootstrap 樣式修改書籍列表過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • 通過Python把學(xué)姐照片做成拼圖游戲

    通過Python把學(xué)姐照片做成拼圖游戲

    馬上就到畢業(yè)季了,你心中的那個學(xué)姐,你真的放下了嗎?本文將用pygame為你的學(xué)姐,定制開發(fā)一個拼圖游戲,感興趣的快跟隨小編一起學(xué)習(xí)一下
    2022-02-02
  • Python讀寫Excel表格的方法

    Python讀寫Excel表格的方法

    這篇文章主要為大家詳細(xì)介紹了Python讀寫Excel表格的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • Python Excel高階教程之使用 Spire.XLS創(chuàng)建雷達(dá)圖和折線圖

    Python Excel高階教程之使用 Spire.XLS創(chuàng)建雷達(dá)圖和折線圖

    Spire.XLS for Python 庫提供了便捷的圖表創(chuàng)建功能,讓開發(fā)者能夠僅用幾行代碼就創(chuàng)建各種如柱形圖、條形圖等專業(yè)圖表,下面就跟隨小編一起來看看具體實現(xiàn)方法吧
    2025-08-08
  • Python使用DPKT實現(xiàn)分析數(shù)據(jù)包

    Python使用DPKT實現(xiàn)分析數(shù)據(jù)包

    dpkt項目是一個Python模塊,主要用于對網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行解析和操作,z這篇文章主要為大家介紹了python如何利用DPKT實現(xiàn)分析數(shù)據(jù)包,有需要的可以參考下
    2023-10-10
  • 使用?OpenAI?API?和?Python?使用?GPT-3的操作方法

    使用?OpenAI?API?和?Python?使用?GPT-3的操作方法

    這篇文章主要介紹了使用?OpenAI?API?和?Python?使用?GPT-3,在本文中,我們將使用?GPT-3。我將向您展示如何訪問它,并提供一些示例來說明您可以使用它做什么,以及您可以使用它構(gòu)建什么樣的應(yīng)用程序,需要的朋友可以參考下
    2023-03-03
  • Python實現(xiàn)對字符串的加密解密方法示例

    Python實現(xiàn)對字符串的加密解密方法示例

    這篇文章主要介紹了Python實現(xiàn)對字符串的加密解密方法,結(jié)合實例形式分析了Python使用PyCrypto模塊進(jìn)行DES加密解密的相關(guān)操作技巧,需要的朋友可以參考下
    2017-04-04

最新評論

博罗县| 雷山县| 汉寿县| 格尔木市| 叶城县| 泾阳县| 金乡县| 岳池县| 藁城市| 安丘市| 太白县| 清苑县| 甘南县| 泰顺县| 许昌县| 瓦房店市| 浙江省| 拉孜县| 荆门市| 普陀区| 兴业县| 阜南县| 门头沟区| 马鞍山市| 当雄县| 中牟县| 蕉岭县| 库尔勒市| 峨边| 洛宁县| 双流县| 镇坪县| 宁夏| 特克斯县| 花垣县| 荥经县| 都兰县| 河北省| 玉龙| 安多县| 平阴县|