BH13 協程基礎

2021-08-17 05:06:05 字數 1353 閱讀 9702

#coding=utf-8

'''created on 2023年3月18日

@author: bh wong

''''''

協程基礎:

概念性知識:

(1)yield 生成器,包含yield 的函式,則是乙個可迭代物件

1.__next__()方法

2.send()方法

(2)生產者,消費者行為:按需提供,類似與kfc,你(消費者)點餐,店員(生產者)按照你的需求提供給你,它不可

能把一天的東西都做出來。這樣做提高效率。

流程:(1)定義帶有yield的函式,當執行到yield時,返回yield後面的東西,可以是函式之類的。當該yield函式被呼叫一次時

執行到yield後停止,下一次從yield之後開始。

涉及模組:

yield 生成器的next()方法 已經更改為__next()方法。而send()未改變。

'''def xiechengtest():

x = yield '她是蒼老師'

print('#######蒼老師分割線########',x)

x = yield '桃古繪里香,呵呵噠'

print('#######桃古繪里香分割線########',x)

x = yield

#課後習題

def demo1():

x = yield

x = yield 'x=haha'

x = yield 'y=haha'

def fab(n):

a,b=1,1

while(byield b

print(b)

a,b = b,a+b

if __name__ == '__main__':

#測試'''

t=xiechengtest()

print(t.__next__())

print(t.send('言傳身教'))

print(t.send('90後宅男女神'))

#不能在沒呼叫__next__()方法前就直接呼叫send(),因為python的generator那時候還沒有執行

#print(t.__next__())

#print(t.__next__())

'''t=demo1()

print(t.__next__())

print(t.send('haha'))

print(t.send('haha'))

#print(t.__next__())

#print(t.__next__())

for t in fab(100):

print(t)

13 爬蟲之協程

首先我們需要知道的是requests是同步的方法。而我們若想使用協程,寫的方法都盡量不是使用同步的方法。因些我們,選擇使用乙個新的模組庫 aiohttp 官網1.1 安裝pip install aiohttp1.2 快速開始import aiohttp loop.run until complete...

python eventlet協程基礎

一 協程相關 1.greenlet greenlet在import的時候為一物件,即greenlet在程式中為一單例物件。greenlet主要實現了儲存函式的棧頂和棧底 函式在堆中的位址和長度。greenlet實現了乙個類似於longjump的功能,用於在函式中執行切換。yeild實現了帶返回值的l...

Python基礎 協程

協程是一種使用者態的輕量級執行緒,本質上是單執行緒 協程擁有自己的暫存器上下文和棧。協程排程切換時,將暫存器上下文和棧儲存到其他地方,在切回來的時候,恢復先前儲存的暫存器上下文和棧。使用greenlet實現協程操作,greenlet需要手動進行切換 首先需要使用greenlet建立類似與堆疊空間,然...