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

Python 中由 yield 實(shí)現(xiàn)異步操作

 更新時間:2020年05月04日 11:11:40   作者:silverze  
這篇文章主要介紹了Python 中由 yield 實(shí)現(xiàn)異步操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

yield在python中初學(xué)時,覺得比較難理解。yield的作用:

①返回一個值、②接收調(diào)用者的參數(shù)

分析下面的代碼:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-

def consumer():
  r = ''
  while True:
    n = yield r
    print("[Consumer] n = %d" %n)
    if not n:
      return
    print("[Consumer] consuming %s..." %n)
    r = '200 OK'

def produce(c):
  c.send(None)
  h = 0
  while h < 5:
    h = h + 1
    print("[Producer] producing %d..." %h)
    s = c.send(h)
    print("[Producer] consumer return: %s" %s)
  c.close()

c = consumer() #創(chuàng)建一個生成器
produce(c) #在該函數(shù)中,調(diào)用生成器的send()方法

結(jié)合程序運(yùn)行過程,可分析出:

第一步:

在produce(c)函數(shù)中,調(diào)用了c.send(None)啟動了生成器,遇到y(tǒng)ield暫停;接著執(zhí)行produce()中接下來的代碼,從運(yùn)行結(jié)果看,確實(shí)打印出了[Produce] producing 1 … 當(dāng)程序運(yùn)行至c.send(h)時,調(diào)用生成器并且通過yield傳遞了參數(shù)(h = 1)進(jìn)入consumer()函數(shù)執(zhí)行。

第二步:

yield傳遞參數(shù)(h=1)給consumer()函數(shù)中的n,并接著上一次暫停處往下繼續(xù)執(zhí)行,打印出[Consumer] n = 1,[Consumer] consuming 1… ;在consumer()函數(shù)中此時 r 被賦值為'200 OK',接著循環(huán)遇到y(tǒng)ield, consumer()函數(shù)又暫停并且返回變量 r 的值,此時程序又進(jìn)入produce(c)函數(shù)中接著執(zhí)行。

第三步:

produce(c)函數(shù)接著第一步中c.send(h)處,繼續(xù)往下執(zhí)行打印出[Producer] consumer return: 200 OK,并進(jìn)行循環(huán),打印[Producer] producing 2… 后,又調(diào)用c.send(h) 。。。如此循環(huán)回到第一步!

補(bǔ)充知識:python asyncio模型 事件循環(huán)

異步建立在事件循環(huán)上.

簡單來說事件循環(huán):

1.把要執(zhí)行的函數(shù)放入隊(duì)列

2.取出函數(shù),執(zhí)行

3.看看還要不要繼續(xù)放入此函數(shù)

4.繼續(xù)第一步

一個簡單的例子說明:

"""
  1.yield 掛起當(dāng)前函數(shù).
  2.使用調(diào)度器循環(huán)
  3.使用next喚醒此函數(shù)繼續(xù)執(zhí)行
"""
def f1():
  for i in range(3):
    print('f1 %d'%i)
    yield
def f2():
  for i in range(5):
    print('f2 %d' %i)
    yield
def f3():
  for i in range(10):
    print('f3 %d'%i)
    yield
#模擬一個調(diào)度器
task_q = collections.deque((f1(),f2(),f3()))
#讓調(diào)度器調(diào)度這些生成器們
while task_q:
  task = task_q.popleft() #彈出首個生成器
  try:
    next(task)     #執(zhí)行,如果沒有異常證明此生成器還沒執(zhí)行完成,可以繼續(xù)放入隊(duì)列中
    task_q.append(task) #執(zhí)行完成后,把任務(wù)繼續(xù)添加到隊(duì)列中.
    time.sleep(0.5)
  except StopIteration as ex:
    pass

以上這篇Python 中由 yield 實(shí)現(xiàn)異步操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python 生成xml文件,以及美化的實(shí)例代碼

    python 生成xml文件,以及美化的實(shí)例代碼

    這篇文章主要介紹了python 生成xml文件,以及美化的實(shí)例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Python使用QQ郵箱發(fā)送Email的方法實(shí)例

    Python使用QQ郵箱發(fā)送Email的方法實(shí)例

    實(shí)際開發(fā)過程中使用到郵箱的概率很高,那么如何借助python使用qq郵箱發(fā)送郵件呢?正好最近工作遇到這個需求,所以想著把方法分享出來方便大家,所以這篇文章主要介紹了Python使用QQ郵箱發(fā)送Email的實(shí)現(xiàn)方法,需要的朋友可以參考。
    2017-02-02
  • pandas計(jì)算相關(guān)系數(shù)corr返回空的問題解決

    pandas計(jì)算相關(guān)系數(shù)corr返回空的問題解決

    本文主要介紹了pandas計(jì)算相關(guān)系數(shù)corr返回空的問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • python中with語句結(jié)合上下文管理器操作詳解

    python中with語句結(jié)合上下文管理器操作詳解

    這篇文章主要給大家介紹了關(guān)于python中with語句結(jié)合上下文管理器操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 淺談python寫入大量文件的問題

    淺談python寫入大量文件的問題

    今天小編就為大家分享一篇淺談python寫入大量文件的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • Python3爬蟲中關(guān)于中文分詞的詳解

    Python3爬蟲中關(guān)于中文分詞的詳解

    在本篇文章里小編給大家整理的是關(guān)于Python3爬蟲中關(guān)于中文分詞的詳解內(nèi)容,需要的朋友們可以參考下。
    2020-07-07
  • 詳解Python中的List

    詳解Python中的List

    這篇文章主要為大家介紹了Python中的List,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • python異步編程之a(chǎn)syncio低階API的使用詳解

    python異步編程之a(chǎn)syncio低階API的使用詳解

    asyncio中低階API的種類很多,涉及到開發(fā)的5個方面,這篇文章主要為大家詳細(xì)介紹了這些低階API的具體使用,感興趣的小伙伴可以學(xué)習(xí)一下
    2024-01-01
  • 如何使用Python中的正則表達(dá)式處理html文件

    如何使用Python中的正則表達(dá)式處理html文件

    html類型的文本數(shù)據(jù)內(nèi)容是由前端代碼書寫的標(biāo)簽+文本數(shù)據(jù)的格式,可以直接在chrome瀏覽器打開,清楚的展示出文本的格式,下面這篇文章主要給大家介紹了關(guān)于如何使用Python中的正則表達(dá)式處理html文件的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • Numpy中關(guān)于arctan和arctan2的區(qū)別

    Numpy中關(guān)于arctan和arctan2的區(qū)別

    這篇文章主要介紹了Numpy中關(guān)于arctan和arctan2的區(qū)別,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09

最新評論

腾冲县| 民权县| 酒泉市| 澄城县| 太保市| 满洲里市| 蓬溪县| 金昌市| 治多县| 游戏| 巴彦淖尔市| 鲁甸县| 东安县| 枞阳县| 桂阳县| 武冈市| 三门县| 深州市| 荥经县| 宿迁市| 昌邑市| 惠水县| 蚌埠市| 南丹县| 南木林县| 静安区| 井冈山市| 哈密市| 阜新| 曲沃县| 集贤县| 兴山县| 中牟县| 广东省| 嘉兴市| 天长市| 鸡东县| 剑阁县| 安阳市| 柯坪县| 无锡市|