日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python协程:从yield/send到async/await

發(fā)布時間:2025/4/16 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python协程:从yield/send到async/await 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這個文章理好了脈落。

http://python.jobbole.com/86069/

我練 習(xí)了一番,感受好了很多。。。

Python由于眾所周知的GIL的原因,導(dǎo)致其線程無法發(fā)揮多核的并行計(jì)算能力(當(dāng)然,后來有了multiprocessing,可以實(shí)現(xiàn)多進(jìn)程并行),顯得比較雞肋。既然在GIL之下,同一時刻只能有一個線程在運(yùn)行,那么對于CPU密集的程序來說,線程之間的切換開銷就成了拖累,而以I/O為瓶頸的程序正是協(xié)程所擅長的:

多任務(wù)并發(fā)(非并行),每個任務(wù)在合適的時候掛起(發(fā)起I/O)和恢復(fù)(I/O結(jié)束)

弄清楚了asyncio.coroutine和yield from之后,在Python3.5中引入的async和await就不難理解了:可以將他們理解成asyncio.coroutine/yield from的完美替身。當(dāng)然,從Python設(shè)計(jì)的角度來說,async/await讓協(xié)程表面上獨(dú)立于生成器而存在,將細(xì)節(jié)都隱藏于asyncio模塊之下,語法更清晰明了。

#!/usr/bin/env python # -*- coding: utf-8 -*-import asyncio import time import random''' def old_fib(n):res = [0] * nindex = 0a = 0b = 1while index < n:res[index] = ba, b = b, a + bindex += 1return resprint("-"*10 + "test old fib " + "-"*10) for fib_res in old_fib(20):print(fib_res)def fib(n):index = 0a = 0b = 1while index < n:yield ba, b = b, a + bindex += 1print("-"*10 + "test yield fib " + "-"*10) for fib_res in fib(20):print(fib_res)def stupid_fib(n):index = 0a = 0b = 1while index < n:sleep_cnt = yield bprint("let me think {0} secs".format(sleep_cnt))time.sleep(sleep_cnt)a, b = b, a + bindex += 1 print("-"*10 + "test yield send " + "-"*10) N = 20 sfib = stupid_fib(N) fib_res = next(sfib) while True:print(fib_res)try:fib_res = sfib.send(random.uniform(0, 0.5))except StopIteration:breakdef copy_fib(n):print("I am copy from fib")yield from fib(n)print("copy end") print("-"*10 + "test yield from " + "-"*10) for fib_res in copy_fib(20):print(fib_res)def copy_stupid_fib(n):print("I am copy from stupid fib")yield from stupid_fib(n)print("Copy end")print("-"*10 + "test yield from and send" + "-"*10) N = 20 csfib = copy_stupid_fib(N) fib_res = next(csfib) while True:print(fib_res)try:fib_res = csfib.send(random.uniform(0, 0.5))except StopIteration:break@asyncio.coroutine def smart_fib(n):index = 0a = 0b = 1while index < n:sleep_secs = random.uniform(0, 0.2)yield from asyncio.sleep(sleep_secs)print("Smart one think {} secs to get {}".format(sleep_secs, b))a, b = b, a + bindex += 1@asyncio.coroutine def stupid_fib(n):index = 0a = 0b = 1while index < n:sleep_secs = random.uniform(0, 0.4)yield from asyncio.sleep(sleep_secs)print("Stupid one think {} secs to get {}".format(sleep_secs, b))a, b = b, a + bindex += 1loop = asyncio.get_event_loop() tasks = [asyncio.async(smart_fib(10)),asyncio.async(stupid_fib(10)),] loop.run_until_complete(async.wait(tasks)) print("All fib finished.") loop.close()'''async def smart_fib(n):index = 0a = 0b = 1while index < n:sleep_secs = random.uniform(0, 0.2)await asyncio.sleep(sleep_secs)print("Smart one think {} secs to get {}".format(sleep_secs, b))a, b = b, a + bindex += 1async def stupid_fib(n):index = 0a = 0b = 1while index < n:sleep_secs = random.uniform(0, 0.4)await asyncio.sleep(sleep_secs)print("Stupid one think {} secs to get {}".format(sleep_secs, b))a, b = b, a + bindex += 1loop = asyncio.get_event_loop() tasks = [asyncio.async(smart_fib(10)),asyncio.async(stupid_fib(10)),] loop.run_until_complete(asyncio.wait(tasks)) print("All fib finished.") loop.close()

Python中的協(xié)程經(jīng)歷了很長的一段發(fā)展歷程。其大概經(jīng)歷了如下三個階段:

  • 最初的生成器變形yield/send
  • 引入@asyncio.coroutine和yield from
  • 在最近的Python3.5版本中引入async/await關(guān)鍵字
  • 總結(jié)

    以上是生活随笔為你收集整理的Python协程:从yield/send到async/await的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 奴色虐av一区二区三区 | 国产欧美一区二区三区国产幕精品 | 午夜桃色 | 麻豆三级视频 | 日本精品在线视频 | 在线精品视频免费观看 | 国产在线拍揄自揄拍 | 偷拍精品一区二区三区 | av小说免费在线观看 | 二区不卡| 在线观看日本 | 欧美亚洲中文精品字幕 | 无码人妻精品一区二区三 | 亚洲美女性生活 | av免费观看大全 | 在线观看h网站 | 91精品国产91久久久久青草 | 欧美乱强伦 | 1级av| 狠狠干亚洲色图 | 久久久久久综合 | 美女黄色小视频 | 国家队动漫免费观看在线观看晨光 | 成人性生交大片免费看中文 | 超碰国产97 | 一本久草 | 中文字字幕在线中文 | 中国色老太hd | 免费观看成人鲁鲁鲁鲁鲁视频 | 香港一级淫片免费放 | 国产少妇在线 | 娇妻高潮浓精白浆xxⅹ | 日本黄色片一级 | 黄色永久网站 | 国产精品久久久久久亚洲av | 午夜一二区 | 偷拍女澡堂一区二区三区 | 网站黄色在线观看 | 99精品视频一区二区三区 | 欧美日韩在线播放 | 高清日韩一区二区 | 二区三区av | 青青草免费在线观看视频 | 特级毛片在线播放 | 一级福利片 | 欧洲精品在线播放 | 国产熟女一区二区丰满 | 日韩第一页在线 | 国产成人愉拍精品久久 | 日韩在线观看视频网站 | 婷婷俺来也| 爱露出 | 亚洲精品国产精品乱码在线观看 | 亚洲精品 日韩无码 | 521av在线 | 久操热线| 色老汉av一区二区三区 | 亚洲福利影院 | 女人av| aa爱做片免费 | 狂野少女电影在线观看国语版免费 | 三年中国片在线高清观看 | 欧美人xxx | 亚洲色图制服丝袜 | 日韩久久一区二区 | 色婷婷综合久久 | 免费超碰在线 | 女人18片毛片60分钟 | 嫩草影院在线视频 | 猛男大粗猛爽h男人味 | 中国女人内谢69xxxxⅹ视频 | 黑人3p波多野结衣在线观看 | 国产香蕉视频在线播放 | 亚洲视频网址 | 超碰不卡| 国产高清不卡视频 | 久久久久久久中文字幕 | 欧美日韩国产成人在线 | 欧美日韩在线免费看 | 18成人免费观看视频 | 不卡一区二区在线观看 | 日剧大尺度床戏做爰 | 日爽夜爽| 成都电影免费大全 | 日韩一级影视 | 涩涩视频免费在线观看 | 一区二区久久精品66国产精品 | 琪琪色影音先锋 | 爱臀av | a级一级片 | 婷婷亚洲视频 | 天堂视频一区二区 | 天天爱天天射 | 无套暴操| 国产精品久久久久久久久久久不卡 | 色爽视频 | 国产原创精品 | 国产亚洲在线观看 | 熟妇人妻无乱码中文字幕真矢织江 |