pythonコルーチン予備--geventライブラリの使用とどのような猿のパッチmonkey_patchを説明

特長コルーチンの仕事は経験ブロックまたは時間のかかるタスク切り替えで、生存率はスレッドでコルーチンを依存し、スレッドがコルーチンに依存します

  • それは問題の少しの例と思われます
GEVENTインポート、タイム

DEFのkisscpc(NUM):
     I :レンジ(NUM)
        を印刷(" キスChenpeiチャンS%下に"(私は+%。1 )、gevent.getcurrent())
    time.sleep(1。 

DEF kisscj( NUM):
     I におけるレンジ(NUM):
        印刷(" キス%sのドライブ強度の"%(私は+ 1。 )、gevent.getcurrent())
    time.sleep(1。 

DEF kissxxd(NUM):
     I レンジ(NUM):
        印刷(" キス徐暁東S%下に"%(私は+ 1。)、gevent.getcurrent())
    time.sleep(1 

G1 = gevent.spawn(kisscj、3 
G2 = gevent.spawn(kisscpc、2 
G3 = gevent.spawn(kissxxd、5 
g1.join()
G2 .join()
g3.join()

出力:

<AT Greenlet最初のドライブ強度キス0x7fe77eed7648:kisscj(3)> 
第二の駆動力下キス <AT Greenlet 0x7fe77eed7648:kisscj(3)> 
キス3ドライブ強度 AT <Greenlet 0x7fe77eed7648:kisscj(3) > 
キス1 Chenpeiチャン下 <Greenlet aTを0x7fe77eed7a48:kisscpc(2)> 
キス2 Chenpeiチャン下 <Greenlet aTを0x7fe77eed7a48:kisscpc(2)> 
キス1徐暁東下 <Greenlet aTを0x7fe77eed7b48:kissxxd(5)> 
キス下2徐暁東ある<Greenlet 0x7fe77eed7b48:kissxxd(5)> 
徐暁東下キス3 <Greenlet AT 0x7fe77eed7b48:kissxxd(5)> 
キス部4徐暁東 <Greenlet AT 0x7fe77eed7b48:kissxxd(5)> 
徐暁東下キス5 <Greenlet AT 0x7fe77eed7b48:kissxxd(5) >

一見、このような結果を達成するために失敗し、我々は同時効果を楽しみにして、タスクがまだ段階的に実行されます。答えはgevent時間の使用にある、すべてがgeventの交換に関連していなければなりません

  • 時間がかかり、実現geventにライブラリの一部を遮断します
GEVENTインポート、タイム

DEFのkisscpc(NUM):
     I (NUM)範囲:
        印刷(" キスChenpeiチャンS%下に"%(私は+ 1 )、gevent.getcurrent()) 
        (#time.sleep 。1 
        GEVENT。 SLEEP(1。 
DEF kisscj(NUM):
     I (NUM)範囲:
        印刷(" キス%sのドライブ強度の"%(私は+ 1 )、gevent.getcurrent())
        #time.sleep(1 
        GEVENT .sleep(1 
:DEFのkissxxd(NUM)
     I 範囲(NUM):
        プリント(" キス徐暁東S%下"%(私は+ 。1 )、gevent.getcurrent())
       #time.sleep(1 
        gevent.sleep(1 
G1 = gevent.spawn(kisscj、3。
G2 = gevent.spawn(kisscpc、2 
G3 = gevent.spawn(kissxxd、5 
g1.join()
g2.join()
g3.join()

出力:

<AT Greenlet最初のドライブ強度キス0x7f2af804e648:kisscj(3)> 
キス1下Chenpeiチャン <Greenlet AT 0x7f2af804ea48:kisscpc(2)> 
キス1下徐暁東 <Greenlet AT 0x7f2af804eb48:(kissxxd 。5)> 
キス第二の駆動強度下 <Greenlet aTを0x7f2af804e648:kisscj(3)> 
キス2 Chenpeiチャン下 <Greenlet aTを0x7f2af804ea48:kisscpc(2)> 
キス2徐暁東下 <Greenlet aTを0x7f2af804eb48:kissxxd(5)> 
キス第3の駆動強度下 <aTをGreenlet 0x7f2af804e648 kisscj(:3)> 
徐暁東下キス3 <Greenlet AT 0x7f2af804eb48:kissxxd(5)> 
キス部4徐暁東 <Greenlet AT 0x7f2af804eb48:kissxxd(5)> 
徐暁東下キス5 <Greenlet AT 0x7f2af804eb48:kissxxd(5) >

ヨ比率 - これは私たちが楽しみです!

しかし、いくつかの初期のコードのために、各タスクの時間のかかる部分が書かれた、従来のコードを使用も可能です(というよりも、geventを。メソッド名)、我々はのコードの大半を変更する必要があることを意味し、

このとき、モンキーパッチは便利です

GEVENTインポート、時間
 からGEVENTインポートサル
monkey.patch_all()
DEF kisscpc(NUM):
     I :(NUM)範囲
        を印刷(" ChenpeiチャンS%下のキス"%(私は+ 1。 )、gevent.getcurrent())
        time.sleep(1。 )
        のgevent.sleep(1。 
DEF kisscj(NUM):
     I (NUM)範囲:
        印刷(" ドライブ強度のキス%sを"%(私は+ 1。 )、gevent.getcurrent()
        time.sleep(1 
        #1 gevent.sleep(1
DEF(NUM)をkissxxd:
    のために範囲(NUM):
        印刷(" 吻了第%sの下徐晓冬"%(I + 1 )、gevent.getcurrent())
        time.sleep(1 
        #1 gevent.sleep(1 
G1 = gevent.spawn(kisscj、3 
G2 = gevent.spawn(kisscpc、2 
G3 = gevent.spawn(kissxxd、5 
g1.join()
g2.join()
g3.join()

出力:

吻了第1下程劲 <Greenlet at 0x7f97e4981948: kisscj(3)>
吻了第1下陈培昌 <Greenlet at 0x7f97e4981a48: kisscpc(2)>
吻了第1下徐晓冬 <Greenlet at 0x7f97e4981b48: kissxxd(5)>
吻了第2下程劲 <Greenlet at 0x7f97e4981948: kisscj(3)>
吻了第2下陈培昌 <Greenlet at 0x7f97e4981a48: kisscpc(2)>
吻了第2下徐晓冬 <Greenlet at 0x7f97e4981b48: kissxxd(5)>
吻了第3下程劲 <Greenlet at 0x7f97e4981948: kisscj(3)>
吻了第3下徐晓冬 <Greenlet at 0x7f97e4981b48: kissxxd(5)>
吻了第4下徐晓冬 <Greenlet at 0x7f97e4981b48: kissxxd(5)>
吻了第5下徐晓冬 <Greenlet at 0x7f97e4981b48: kissxxd(5)>

我们看到仅仅用了monkey.patch_all()就达到了期待的效果,而其他方面几乎没什么改变

 

おすすめ

転載: www.cnblogs.com/saintdingspage/p/11622740.html