中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python 異步協程函數原理及實例詳解

發布時間:2020-10-01 23:55:37 來源:腳本之家 閱讀:189 作者:心悅君兮君不知-睿 欄目:開發技術

這篇文章主要介紹了Python 異步協程函數原理及實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

一、 asyncio

1.python3.4開始引入標準庫之中,內置對異步io的支持

2.asyncio本身是一個消息循環

3.步驟:

(1)創建消息循環

(2)把協程導入

(3)關閉

4.舉例:

import threading
# 引入異步io包
import asyncio
# 使用協程
@ asyncio.coroutine
def hello():
	print("Hello World!(%s)" % threading.current_thread())
print("Start......(%s)" % threading.current_thread())
yield from asyncio.sleep(5)
print("Done.....(%s)" % threading.current_thread())
print("Hello again!(%s)" % threading.current_thread())
# 啟動消息循環
loop = asyncio.get_event_loop()
# 定義任務
tasks = [hello(), hello()]
# asyncio使用wait等待task執行完畢
loop.run_until_complete(asyncio.wait(
	tasks))
# 關閉消息循環
loop.close()

Python 異步協程函數原理及實例詳解

二、asyncio and await

1.為了更好的表示異步io

2.python3.5引入

3.讓協程代碼更加簡潔

4.使用上,可以簡單的進行替換

(1)用async來替換@asyncio,coroutine

(2)用await來替換yield from

按照上面這個語法可以來改寫前面的例子,運行結果是完全一致的

三、aiohttp

1.asyncio實現單線程的并發io,在客戶端用處不大

2.在服務端可以asyncio+coroutine配合,因為http是io操作

3.asyncio實現了tcp,udp,ssl等協議

4.aiohttp是基于asyncio實現的http框架

5.例子:

import asyncio
from aiohttp
import web
​
async def index(request):
	await asyncio.sleep(0.5)
return web.Response(body = b "<h2>Index</h2>")
​
async def hello(request):
	await asyncio.sleep(0.5)
text = "<h2>hello,%s!</h2>" % request.match_info[
	"name"]
return web.Response(body = text.encode(
	"utf-8"))
​
async def init(loop):
	app = web.Application(loop = loop)
app.router.add_route("GET", "/", index)
app.router.add_route("GET",
	"/hellp/{name}", hello)
srv = await loop.create_server(app.make_handler(),
	"127.0.0.1", 8000)
print(
	"Server started at http://127.0.0.1:8000..."
)
return srv
​
loop = asyncio.get_event_loop()
loop.run_until_complete(init(loop))
loop.run_forever()

四、current,futures

1. python3新增的庫

2.類似其它語言的線程池的概念

3.利用multiprocessing實現真正的并行計算(當然要求我們的CPU是多核的)

4.核心原理:以子進程的形式,實現多個python解釋器

從而令python程序,可以利用多核CPU來提升執行速度。由于子進程于主解釋器相分離,所以他們的全局解釋器鎖也是相互獨立的,每個子進程都能完整的使用一個CPU內核

5.concurrent.futures.Executor

(1)ThreadPoolExecutor

(2)ProcessPoolExecutor

(3)執行的時候需要自行選擇

(4)submit(fn,args,kwargs)

fn:異步執行的函數

args,kwargs參數

import time
from concurrent.futures
import ThreadPoolExecutor
​
def return_future(msg):
	time.sleep(3)
return msg
​
# 創建一個線程池
pool = ThreadPoolExecutor(max_workers =
	2)# 參數是2, 代表里面有兩個線程干活
# 往線程池里面加入兩個task
f1 = pool.submit(return_future, "hello")
f2 = pool.submit(return_future, "world")
time.sleep(1)
# 等待執行完畢
print(f1.done())
time.sleep(3)
print(f2.done())
# 結果
print(f1.result())
print(f2.result())

Python 異步協程函數原理及實例詳解

源碼

d28_1_asynchronization_examples.py

https://github.com/ruigege66/Python_learning/blob/master/d28_1_asynchronization_examples.py

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

岗巴县| 鄱阳县| 玉树县| 东乌珠穆沁旗| 邹城市| 镇原县| 涪陵区| 固镇县| 顺平县| 白玉县| 合肥市| 毕节市| 澎湖县| 全州县| 库车县| 柘荣县| 县级市| 翁牛特旗| 武平县| 丹棱县| 屏东市| 沁水县| 安吉县| 明溪县| 茌平县| 池州市| 原平市| 论坛| 陵川县| 镇康县| 广州市| 利津县| 鞍山市| 始兴县| 图们市| 台州市| 外汇| 大方县| 涿鹿县| 罗平县| 中宁县|