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

淺析python協(xié)程相關(guān)概念

 更新時間:2018年01月20日 10:18:12   投稿:laozhang  
本篇文章給大家分析了一下python協(xié)程的概念以及代碼相關(guān)實例,有興趣的朋友跟著小編學習下吧。

這篇文章是讀者朋友的python協(xié)程的學習經(jīng)驗之談,以下是全部內(nèi)容:

協(xié)程的歷史說來話長,要從生成器開始講起。

如果你看過我之前的文章python奇遇記:迭代器和生成器 ,對生成器的概念應(yīng)該很了解。生成器節(jié)省內(nèi)存,用的時候才生成結(jié)果。

 

# 生成器表達式
a = (x*x for x in range(10))
# next生成值
next(a()) # 輸出0
next(a()) # 輸出1
next(a()) # 輸出4

與生成器產(chǎn)出數(shù)據(jù)不同的是,協(xié)程在產(chǎn)出數(shù)據(jù)的同時還可以接收數(shù)據(jù),具體來說就是把yield 放在了表達式的右邊。我們可以使用.send() 把數(shù)據(jù)發(fā)送給協(xié)程函數(shù)。

 def writer():
  print('-> coroutine started')
  for i in range(8):
    w = yield
    print(i+w)

w = writer()
# 本質(zhì)還是生成器
>>> w
<generator object writer at 0x000002595BC57468>
# 首先要用next()把協(xié)程激活
>>> next(w)
-> coroutine started
# 發(fā)送數(shù)據(jù)
>>> w.send(1)
1
# send到第八次之后會拋出異常
# 因為協(xié)程已經(jīng)結(jié)束了
---------------------------------------------------------------------------
StopIteration               Traceback (most recent call last)

第一步必須使用next() 激活協(xié)程函數(shù),這樣才能在下一步使用.send() 發(fā)送數(shù)據(jù)。

可以看到,在第8次接收完數(shù)據(jù)之后,會產(chǎn)生結(jié)束的異常,因為程序流程結(jié)束了,這是正?,F(xiàn)象。加個異常處理即可。如果需要在兩個協(xié)程間傳遞數(shù)據(jù)呢?

def writer():
  while True:
    w = yield
    print('>>', w)

def writer_wrapper(coro):
  # 激活
  next(coro)
  while True:
    # 異常處理
    try:
      x = yield
      # 發(fā)送數(shù)據(jù)給writer
      coro.send(x)
    except StopIteration:
      pass
w = writer()
wrap = writer_wrapper(w)
# 激活
next(wrap)
for i in range(4):
  wrap.send(i)
# 輸出
>> 0
>> 1
>> 2
>> 3

上面的代碼中,數(shù)據(jù)首先傳遞到writer_wrapper,之后再傳遞到writer 。

data——>writer_wrapper——>writer

可以這么寫,不過,又要預先激活,又要加異常,看起來有點麻煩啊。yield from 的出現(xiàn)可以解決這個問題,同樣是傳遞數(shù)據(jù):

def writer():
  while True:
    w = yield
    print('>>', w)
def writer_wrapper2(coro):
  yield from coro

一行代碼解決問題。

總之,yield from相當于提供了一個通道,使得數(shù)據(jù)可以在協(xié)程之間流轉(zhuǎn) 。writer_wrapper2 中使用yield from coro時,coro此時獲得控制權(quán),在我們.send() 數(shù)據(jù)時,writer_wrapper2 被阻塞,直到writer 打印出結(jié)果。

在這個階段,協(xié)程本質(zhì)上還是由生成器構(gòu)成的。

即使我們使用yield from 簡化了流程,協(xié)程和生成器的知識理解起來還是有點懵逼,而且yield from 用在異步編程中有諸多不順(asyncio以前就是用yield from),于是在3.5版本的python中,棄用了yield from ,新加入了兩個關(guān)鍵字async 和await ,同時協(xié)程不再是生成器類型,而是原生的協(xié)程類型。

現(xiàn)在我們定義一個協(xié)程要像下面這樣:

async def func():
  await 'some code'

不用于異步的協(xié)程該怎么用,我還不知道。所以,協(xié)程的介紹到這里就結(jié)束啦。感謝你對腳本之家的支持。

相關(guān)文章

  • Python實現(xiàn)圖像和辦公文檔處理的方法和技巧

    Python實現(xiàn)圖像和辦公文檔處理的方法和技巧

    本文介紹了Python實現(xiàn)圖像和辦公文檔處理的方法和技巧,包括使用Pillow庫處理圖像、使用OpenCV庫進行圖像識別和處理、使用PyPDF2庫處理PDF文檔、使用docx和xlwt庫處理Word和Excel文檔等,幫助讀者更好地掌握Python在圖像和辦公文檔處理方面的應(yīng)用
    2023-05-05
  • python的re正則表達式實例代碼

    python的re正則表達式實例代碼

    這篇文章主要介紹了python的re正則表達式,分享了一則re模塊實現(xiàn)的正則表達式實例代碼,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • Python網(wǎng)絡(luò)爬蟲之爬取微博熱搜

    Python網(wǎng)絡(luò)爬蟲之爬取微博熱搜

    這篇文章主要介紹了Python網(wǎng)絡(luò)爬蟲之爬取微博熱搜的相關(guān)知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-04-04
  • 關(guān)于Gradio中Button用法及事件監(jiān)聽器click方法使用

    關(guān)于Gradio中Button用法及事件監(jiān)聽器click方法使用

    介紹了在Gradio中使用Button組件和事件監(jiān)聽器的click方法,通過一個簡單的示例展示了如何實現(xiàn)點擊按鈕輸出一行文字的功能,在實際項目中遇到了一個錯誤,經(jīng)過排查和請教室友后,發(fā)現(xiàn)問題出在inputs參數(shù)的傳遞上,需要傳入一個包含輸入組件的列表
    2024-11-11
  • python+matplotlib實現(xiàn)鼠標移動三角形高亮及索引顯示

    python+matplotlib實現(xiàn)鼠標移動三角形高亮及索引顯示

    這篇文章主要介紹了Python+matplotlib實現(xiàn)鼠標移動三角形高亮及索引顯示,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • Python操作word文檔插入圖片和表格的實例演示

    Python操作word文檔插入圖片和表格的實例演示

    這篇文章主要給大家介紹了關(guān)于Python操作word文檔插入圖片和表格的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • python利用rsa庫做公鑰解密的方法教程

    python利用rsa庫做公鑰解密的方法教程

    RSA是一種公鑰密碼算法,RSA的密文是對代碼明文的數(shù)字的 E 次方求mod N 的結(jié)果。下面這篇文章主要給大家介紹了關(guān)于python利用rsa庫做公鑰解密的方法教程,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下。
    2017-12-12
  • python滲透測試linux密碼激活的示例

    python滲透測試linux密碼激活的示例

    這篇文章主要介紹了python滲透測試linux密碼激活的相關(guān)知識,通過一個crypt的示例給大家介紹的非常詳細,對大家學習python滲透知識有很大的幫助,需要的朋友可以參考下
    2021-05-05
  • Python爬蟲HTPP請求方法有哪些

    Python爬蟲HTPP請求方法有哪些

    在本篇內(nèi)容里小編給大家整理的是關(guān)于Python爬蟲HTPP請求方法以及相關(guān)知識點,需要的朋友們可以參考下。
    2020-06-06
  • 修改Pandas的行或列的名字(重命名)

    修改Pandas的行或列的名字(重命名)

    這篇文章主要介紹了修改Pandas的行或列的名字(重命名),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12

最新評論

平舆县| 蒙阴县| 仪征市| 杭锦旗| 湟中县| 平利县| 崇仁县| 水城县| 霍邱县| 沅江市| 股票| 虎林市| 铜川市| 宜兰县| 盘锦市| 洛阳市| 博兴县| 襄樊市| 微山县| 陆河县| 江门市| 泗水县| 花莲县| 凯里市| 济源市| 泊头市| 麻江县| 东乌珠穆沁旗| 广宗县| 临泉县| 灵璧县| 浦县| 延津县| 门源| 南溪县| 长汀县| 聂拉木县| 布拖县| 依兰县| 攀枝花市| 丰原市|