ネットワークプログラミングモジュールコルーチン--gevent

ネットワークプログラミングモジュールコルーチン--gevent

geventモジュール

安装
pip3 install gevent

Geventは、サードパーティのライブラリである、あなたは簡単にgeventによって同期または非同期並行プログラミングを実装することができ、メインモードはgevent Greenletで使用され、それがアクセスPythonのC拡張モジュールの軽量コルーチンの形です。すべての主要なオペレーティング・システム・プロセス内で実行されますが、彼らは共同でスケジュールされているGreenlet。

#用法
g1=gevent.spawn(func,1,,2,3,x=4,y=5)创建一个协程对象g1,spawn括号内第一个参数是函数名,如eat,后面可以有多个参数,可以是位置实参或关键字实参,都是传给函数eat的
g2=gevent.spawn(func2)
g1.join() #等待g1结束
g2.join() #等待g2结束
#或者上述两步合作一步:gevent.joinall([g1,g2])
g1.value#拿到func1的返回值

これは、自動的にタスクがIOを遮断遭遇切り替わります

import gevent
def eat(name):
    print('%s eat 1' %name)
    gevent.sleep(2)
    print('%s eat 2' %name)
def play(name):
    print('%s play 1' %name)
    gevent.sleep(1)
    print('%s play 2' %name)
g1=gevent.spawn(eat,'egon')
g2=gevent.spawn(play,name='egon')
g1.join()
g2.join()
#或者gevent.joinall([g1,g2])
print('主')

実施例上部gevent.sleep(2)認識障害物IO模擬geventであり、そしてtime.sleep(2)または他の障害物、gevent直接次の行、パッチを使用する必要性を認識していない、それを識別することができます。

gevent輸入サルから、monkey.patch_all()などの時間、ソケットモジュールとして、以前のパッチのそれらの前に配置しなければならない、または我々は単に覚えている:使用gevent、gevent輸入猿からにする必要がある。monkey.patch_all()プットファイルの先頭に。

from gevent import monkey;monkey.patch_all()
import gevent
import time
def eat():
    print('eat food 1')
    time.sleep(2)
    print('eat food 2')
def play():
    print('play 1')
    time.sleep(1)
    print('play 2')
g1=gevent.spawn(eat)
g2=gevent.spawn(play_phone)
gevent.joinall([g1,g2])
print('主')

おすすめ

転載: www.cnblogs.com/Kwan-C/p/11595885.html