Python3 asyncio非同步框架 基礎知識

2021-10-04 18:38:10 字數 1292 閱讀 5862

有些問題:

async

defrun()

:await asyncio.ensure_future(p.packing())

#非阻塞

await asyncio.gather(

*tasks)

#阻塞

先解釋幾個名詞:

同步與非同步:同步需要等待io返回的結果,非同步不需要io返回的結果

阻塞與非阻塞:阻塞 程式要等待,非阻塞 程式做其他任務

效果比較:

同步阻塞 = 非同步阻塞 < 同步非阻塞 < 非同步非阻塞

併發與並行:

併發:協程, 多個任務同時進行, 並行:執行緒、程序,同一時間做多個任務

async 定義協程函式

await io費時間的任務進行掛起(非同步)

使用同步方式進行非同步化包裝 loop.run_in_executor(executors, fun, *args)

import concurrent.futures as cf  # 多加乙個模組

import asyncio

import time, requests

deffun

(i, url)

: r = requests.get(url)

print

(i,'|'

, r)

return r

async

defmain()

:with cf.threadpoolexecutor(max_workers=10)

as executor:

#10個程序

loop = asyncio.get_event_loop(

) futures =

( loop.run_in_executor(

executor,

fun,

#函式 i,

"")for i in

range(10

))for t in

await asyncio.gather(

*futures)

:print

(t)s_time = time.time(

)loop = asyncio.get_event_loop(

)loop.run_until_complete(main())

print

(time.time(

)- s_time)

asyncio 乙個不錯的包

python3 非同步模組asyncio

yield方法引入,這裡存在的問題是,如果你想建立從0到1,000,000這樣乙個很大的序列,你不得不建立能容納1,000,000個整數的列表。但是當加入了生成器之後,你可以不用建立完整的序列,你只需要能夠每次儲存乙個整數的記憶體即可。import asyncio asyncio.coroutine...

python3非同步asyncio學習筆記

1 定義 微執行緒,人為創造協程,控制程式上下文切換執行流程,乙個執行緒中只能有乙個協程 2 python實現協程 1 yield yield from 2 asyncio模組 3 gevent模組 版本python3.5以上 1 事件迴圈 asyncio.get event loop 檢測並執行某...

Python標準庫之asyncio

asyncio是python 3.4版本引入的標準庫,直接內建了對非同步io的支援。asyncio的程式設計模型就是乙個訊息迴圈。我們從asyncio模組中直接獲取乙個eventloop的引用,然後把需要執行的協程扔到eventloop中執行,就實現了非同步io。用asyncio實現hello wo...