高性能の非同期爬虫類02

+シングルスレッドの非同期コルーチン(推奨):

いくつかのキーワード-asyncio説明:

  • event_loopイベントループ:満たすイベントは、適切な関数のコルーチンを呼び出すとき、プログラム無限ループ、イベントループへの機能の登録番号を開始

  • コルーチンコルーチン:コルーチンオブジェクトは非同期キーワードを使用して定義された関数を指し、それはすぐに関数呼び出しを実行しませんが、コルーチンオブジェクトを返します。コルーチンのオブジェクトは、イベントループによって呼び出されるイベントループに登録する必要があります。

  • タスクタスクは:コルーチンオブジェクトがネイティブ関数を中断することができるされ、タスクは、タスクの状態の多様を含む、コルーチンにさらにカプセル化されます

  •  

  • 非同期:非同期コルーチンを定義します

  • awati:実行を停止するための方法をブロック待っています。

テスト1:

インポートASYNCIO 
非同期DEFのdo_something(STH):
     印刷" %Sをやって"%のSTH)
     印刷" DONEを" 
C(= do_something " 食べる"コルーチンの実行を返さないこのメソッドは、オブジェクトを
印刷する(C) 

結果を 
SYS :. 1:RuntimeWarning:コルーチン' do_somethingが' 待望ていませんでした
 <0x0000014EE2EFD1C8 ATコルーチンをdo_somethingオブジェクト>

テスト2:

インポートASYNCIO 
非同期DEFのdo_something(STH):
     印刷" やっ%S "STH)
     印刷" DONE " 
C = do_something(" 食べる"このメソッドん 
ループasyncio.get_event_loop =() は、ループ作成 
、ループを.run_until_complete(c)の#のループトリガの実行のCに投げコルーチンオブジェクト

#の結果は
食べること
DONE

ループによって作成されたテスト3(タスクの使用)。

輸入asyncio 
非同期デフdo_something(STH):
     印刷" %sのをやって"%のSTH)
     プリント" " 
、C = do_something(" 食べる" 
ループ = asyncio.get_event_loop()
タスク = loop.create_task(C)
 印刷(タスク)保留中の未执行
loop.run_until_complete(タスク)
 プリント(タスク)#は完毕执行終了

结果
<タスクの保留コロ= <do_something()Cで実行されている:/Users/86155/PycharmProjects/chapter_7/mybs4.py:48 >> 
食べやって
行わ
 /ユーザ/ <タスクが終了コロ= <do_something()Cで定義され、行われ86155 / PycharmProjects / chapter_7 / mybs4.py:48>結果=なし>

 

によって作成されたテスト4(将来の使用)asynico。 

輸入asyncio 
非同期デフdo_something(STH):
     印刷" %sのをやって"%のSTH)
     プリント" " 
、C = do_something(" 食べる" 
ループ = asyncio.get_event_loop()
タスク = asyncio.ensure_future(C)
 印刷(タスク)
loop.run_until_complete(タスク)
プリント(タスク)
 结果 
<タスク係属コロ= <do_something()Cで動作:/Users/86155/PycharmProjects/chapter_7/mybs4.py:48 >>  
食べることをやって
完了
<結果=なし> 48:/Users/86155/PycharmProjects/chapter_7/mybs4.pyタスクコロ= <do_something()Cで定義され、行わ終了しました>

 

試験5(コールバック)

ASYNCIOインポート
非同期DEFのdo_something(STH):
印刷(STHの%を'%Sがやって')1つの##。
印刷( 'DONE')2 ##
結果#1 STHリターンコールバック関数()
DEF call_bask(タスク):
印刷(タスク.Result())
C = do_something() 'を実行'
ループ= asyncio.get_event_loop()
タスク= loop.create_task(C)
コールバック関連タスクオブジェクト
task.add_done_callback(call_bask)
loop.run_until_complete(タスク)

#結果

稼働やって
行って
実行しています



 

 

  

おすすめ

転載: www.cnblogs.com/Jnhnsnow/p/11616547.html