python学習ノート19:協程常用パッケージ
ケース・アドレスコモン asyncio python3.4導入を開始した標準ライブラリには、ステップioのサポート が内蔵されています. asyncio自体はメッセージループ であるステップ メッセージループ を作成するコパスを に導入する.閉じる ケース08 ケース09-2つのtasks ケースv 10-得られた複数のサイト async and await 非同期io をよりよく表すために python3.5導入開始 coroutineコードをより簡潔にする 使用上、置き換え可能 @asyncio.Coroutineをasync に置き換える yield fromをawait に置き換える
ケースv 11、ケース09を直接 に置き換える
aiohttp紹介 asyncioは単一スレッド同時IOを実現し、クライアントではあまり役に立たない は、httpがioオペレーション であるため、サーバ側でasyncio+coroutineと連携することができる. asyncioはTCP,UIDP,SSLなどのプロトコル を実現した. aiohttpはasyncio実装に与えるHTTPフレームワーク である. pip install aiohttp ケース07
concurrent.futures python 3新規ライブラリ 他の言語に類似するスレッドプールの概念 このモジュールはmultiprocessiongを利用して真の並列計算 を実現する.の核心原理は:concurrent.futuresは、サブプロセスとして複数のpython解釈器を平行に実行し、pythonプログラムがマルチコアCPUを利用して実行速度を向上させることができます.サブプロセスはメイン解釈器から分離されるため、グローバル解釈器ロックも互いに独立している.各サブプロセスは、1つのCPUコアを完全に使用できます. concurrent.futures.Executor ThreadPoolExecutor(ラインプール) ProcessPoolExecutor(プログラムプール) submit(fn, args, kwargs) fn:非同期実行関数 args,kwargs:パラメータ公式デッドロックケース ケースv 14 map(fn, *iterables, timeout=None) はmap関数と似ている 関数は を非同期で実行する必要がある. timeout:タイムアウト時間 ケースv 12 ケースv 15 から実行結果はlistであり、データはlistから取り出す必要がある .
submitとmapは必要に応じて1つ選択すれば である.ケースv 13 Future 将来完了する必要があるタスク futureインスタンスはExcutorである.submit作成 ケースv 17
aiohttp
concurrent.futures
import time
def wait_on_b():
time.sleep(5)
print(b.result()) #b , a return
return 5
def wait_on_a():
time.sleep(5)
print(a.result()) # a , b
return 6
executor = ThreadPoolExecutor(max_workers=2)
a = executor.submit(wait_on_b)
b = executor.submit(wait_on_a)
with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:
print(list(executor.map(sleeper, x)))