42- Pythonのシリアル非同期関数のコルーチン

、asyncio

1.python3.4は、非同期IOのためのビルトインサポートの標準ライブラリに導入されて

自体2.asyncioメッセージループであります

3.ステップ:

(1)メッセージループを作成します

(2)コルーチンを導入

(3)閉じます

例4:

 

輸入スレッド

非同期IOパッケージのご紹介

輸入asyncio

使用コルーチン

@ asyncio.coroutine

デフ)(ハロー:

    印刷" Hello Worldの!(%s)は"%のthreading.current_thread())

    印刷" スタート......(%s)は"%のthreading.current_thread())

    収量 から asyncio.sleep(5 

    印刷" 完了.....(%s)は"%のthreading.current_thread())

    印刷" こんにちは、再び!(%s)は"%のthreading.current_thread())

#1 開始メッセージループ

ループ = asyncio.get_event_loop()

タスクの定義

タスクを = [こんにちは()、こんにちは()]

ASYNCIO使用して待ち待ちのタスクが終了します

loop.run_until_complete(asyncio.wait(タスク))

閉じるメッセージループ

loop.close()

二、asyncioと待ちます

より良い非同期IOを表現するために1

2.python3.5導入

コードより簡潔コルーチンを作るために3。

4.使用して、簡単に交換することができます

(1)は、非同期の@ asyncio、コルーチンに置き換えられます

(2)から待つ収率で置き換えられています

この構文上記によれば、前の例を書き換えることができ、結果が完全に一致しています

三、aiohttp

シングルスレッドの同時実行IOを達成1.asyncio、クライアントは有用ではありません

HTTPはIO操作であるため、2は、サービス側で+コルーチンをasyncioことができます

3.asyncio実現TCP、UDP、SSLプロトコル、等

4.aiohttpはasyncioを達成するために、HTTPベースのフレームワークであります

5.例:

 

輸入asyncio

aiohttp インポートウェブ



非同期デフ指数(要求):

    待つasyncio.sleep( 0.5 

    返す web.Response(ボディ= B " <H1>インデックス</ H1> " 



非同期デフこんにちは(リクエスト):

    待つasyncio.sleep( 0.5 

    テキスト = " <H1>こんにちは、%sの!</ H1> " request.match_info%[ " 名前" ]

    戻り web.Response(本体= text.encode(" UTF-8 " ))



非同期デフのinit(ループ):

    アプリ = web.Application(ループ= ループ)

    app.router.add_route(" GET "" / " 、インデックス)

    app.router.add_route(" GET "" / HELLP / {名前} " 、ハロー)

    SRVは = loop.create_server(app.make_handler()、待つ" 127.0.0.1 "、8000 

    印刷" ://127.0.0.1:サーバがHTTPで開始8000 ... " 

    リターンSRV



ループ = asyncio.get_event_loop()

loop.run_until_complete(INIT(ループ))

loop.run_forever()

 

 

三、現在、未来

新しいライブラリ1のpython3

2.コンセプトは、他の言語でのスレッドプールに似ています

3.真の並列マルチプロセッシング・コンピューティング(もちろんCPUは、私たちに多核が必要です)

4.コア原則:複数のPythonインタプリタを実装する子プロセスとして

これによりプログラムのpythonは、マルチコアCPUの実行速度を改善するために利用することができる作ります。子供がメインインタプリタから分離するので、彼らのグローバルインタプリタロックはまた、互いに独立しているため、それぞれの子は完全なCPUコアを使用することができます

5.concurrent.futures.Executor

(1)ThreadPoolExecutor

(2)ProcessPoolExecutor

(3)それらのニーズに実行する場合

(4)提出(FN、引数、kwargsから)

FN:機能は非同期で実行します

引数、kwargsからパラメータ

 

 

インポート

concurrent.futuresのインポートThreadPoolExecutor



デフreturn_future(MSG):

    time.sleep( 3 

    リターンMSG



スレッドプールを作成し

、プール = ThreadPoolExecutorを(max_workers = 2)のために働く2件のスレッドがあり、2であります

2タスク参加スレッドプールに

F1 = pool.submit(return_future、こんにちは

F2 = pool.submit(return_future、" 世界" 

time.sleep( 1 

待ちを終了します

印刷(f1.done())

time.sleep( 3 

印刷(f2.done())

#の結果

印刷(f1.result())

印刷(f2.result())

第五に、ソースコード

d28_1_asynchronization_examples.py

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

2.CSDNます。https://blog.csdn.net/weixin_44630050(西6月6月ムードが知らない - ルイを)

3.パークブログます。https://www.cnblogs.com/ruigege0000/

4.マイクロチャネル公共数に焦点を歓迎:フーリエ変換は、ビッグデータの学習教材を取得するには、唯一の交流を学ぶために、舞台裏の返信「贈り物」をパブリック個人番号を変換します

 

 

おすすめ

転載: www.cnblogs.com/ruigege0000/p/11682120.html