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:パラメータ公式デッドロックケース
    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)
  • ケースv 14
  • map(fn, *iterables, timeout=None)
  • はmap関数と似ている
  • 関数は
  • を非同期で実行する必要がある.
  • timeout:タイムアウト時間
  • ケースv 12
  • ケースv 15
  • から実行結果はlistであり、データはlistから取り出す必要がある
    with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:
            print(list(executor.map(sleeper, x)))
  • .
  • submitとmapは必要に応じて1つ選択すれば
  • である.
  • ケースv 13
  • Future
  • 将来完了する必要があるタスク
  • futureインスタンスはExcutorである.submit作成
  • ケースv 17