有些問題:
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...