自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Python 中的 AsyncIO 基礎(chǔ)知識(shí)

開發(fā) 前端
雖然有一些方法可以在Python中實(shí)現(xiàn)并行編程,但它默認(rèn)是單線程語言。要充分利用單線程執(zhí)行的優(yōu)勢(shì),我們可以使用AsyncIO庫。

雖然有一些方法可以在Python中實(shí)現(xiàn)并行編程,但它默認(rèn)是單線程語言。要充分利用單線程執(zhí)行的優(yōu)勢(shì),我們可以使用AsyncIO庫。

異步代碼顧名思義,AsyncIO在Python中提供了異步執(zhí)行。異步代碼以非阻塞的方式運(yùn)行。如果一個(gè)函數(shù)等待時(shí)間較長,可以在等待期間執(zhí)行另一個(gè)任務(wù),而不是將所有任務(wù)都暫停。

下面的圖像進(jìn)一步說明了同步與異步代碼執(zhí)行的區(qū)別。在等待第一個(gè)響應(yīng)時(shí),我們可以發(fā)出第二個(gè)請(qǐng)求以更好地利用處理能力。

盡管它不使用多線程,但它確實(shí)執(zhí)行代碼的并發(fā)執(zhí)行,并且在許多情況下大大減少了等待時(shí)間。

使用AsyncIOAsyncIO庫有兩個(gè)重要的關(guān)鍵字:

  1. async
  2. await 我們可以使用async def關(guān)鍵字來定義協(xié)程。 await關(guān)鍵字用在異步協(xié)程內(nèi),表示程序應(yīng)該在此等待并同時(shí)執(zhí)行其他操作。

看一下下面的代碼示例:

import asyncio
async def co_routine(num):print('進(jìn)入?yún)f(xié)程編號(hào):', num)await asyncio.sleep(2)print('退出協(xié)程編號(hào):', num)
async def main():await asyncio.gather(co_routine(1),co_routine(2),co_routine(3))

asyncio.run(main())以下是輸出結(jié)果!進(jìn)入?yún)f(xié)程編號(hào):

1進(jìn)入?yún)f(xié)程編號(hào): 2進(jìn)入?yún)f(xié)程編號(hào): 3退出協(xié)程編號(hào): 1退出協(xié)程編號(hào): 2退出協(xié)程編號(hào): 3正如您所見,我們?cè)诶^續(xù)執(zhí)行協(xié)程2和3之前,不需要等待協(xié)程1完成執(zhí)行。

讓我們逐步看一下代碼。import asyncio這樣導(dǎo)入asyncio庫到您的Python代碼中。async def co_routine(num):print('進(jìn)入?yún)f(xié)程編號(hào):', num)await asyncio.sleep(2)print('退出協(xié)程編號(hào):', num)這是我們的異步協(xié)程。我們使用async def關(guān)鍵字來定義它。我們?cè)谶M(jìn)入時(shí)打印一條消息,然后協(xié)程休眠2秒。這里發(fā)生了魔法。await關(guān)鍵字表示我們必須等待,因此程序可以執(zhí)行其他操作。await關(guān)鍵字只能在異步協(xié)程內(nèi)使用!async def main():await asyncio.gather(co_routine(1),co_routine(2),co_routine(3))這定義了我們的異步主程序。asyncio.gather接受多個(gè)協(xié)程調(diào)用,并在它們并發(fā)執(zhí)行后返回。這里,我們運(yùn)行了值為1、2和3的協(xié)程。由于我們必須使用await關(guān)鍵字,所以我們的主程序也被定義為async。

但是,對(duì)于最終的調(diào)用,我們可以使用asyncio.run。asyncio.run(main())這將執(zhí)行我們的主程序,而無需使用await。

現(xiàn)在,您可以在希望并發(fā)運(yùn)行的程序中使用async/await。

責(zé)任編輯:華軒 來源: 今日頭條
相關(guān)推薦

2013-10-22 15:48:35

2023-07-04 07:31:06

MapReduce數(shù)據(jù)處理編程模型

2011-03-16 11:17:56

IptablesICMP

2022-03-30 08:37:32

Python函數(shù)編程自定義函數(shù)

2021-11-05 15:31:01

UbuntuLinux

2021-03-13 10:14:59

Python定義函數(shù)Python基礎(chǔ)

2010-02-03 10:36:56

Python基礎(chǔ)知識(shí)

2011-11-04 17:26:12

2013-03-27 15:56:05

Android開發(fā)Andriod繪圖

2011-03-16 11:12:06

Iptables

2021-08-18 16:09:39

NestJS

2023-05-12 09:40:53

ContextGolang

2023-08-22 21:42:03

Bash函數(shù)

2009-09-23 11:07:11

Hibernate基礎(chǔ)

2010-07-16 10:53:30

Perl基礎(chǔ)

2015-06-01 13:35:43

數(shù)據(jù)中心DCIM

2009-04-17 14:22:40

XPathXML基礎(chǔ)

2011-09-16 10:13:02

Emacs

2011-03-29 14:11:20

Cacti基礎(chǔ)知識(shí)

2009-04-10 09:35:00

WCDMA基礎(chǔ)無線網(wǎng)絡(luò)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)