特長コルーチンの仕事は経験ブロックまたは時間のかかるタスク切り替えで、生存率はスレッドでコルーチンを依存し、スレッドがコルーチンに依存します
- それは問題の少しの例と思われます
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()就达到了期待的效果,而其他方面几乎没什么改变