Pythonマルチコルーチン開発(マイクロスレッド、ファイバー)

Pythonには、並行処理のための複数のプロセス、複数のスレッド、および複数のコルーチンがあります

Pythonが提供する並行プログラミングでは、マルチコルーチンの開発が最高のパフォーマンス形式の実装です。マルチスレッドにはGILロックの問題があります。
マルチコルーチンのリソース制御は開発者に渡され、制御、マルチプロセス、およびマルチスレッドはオペレーティングシステムによって制御されます。さまざまなローテーションがあります。実行期間の後、リソースは放棄され、処理のために他のプロセスまたはスレッドに渡されます。このような処理にはパフォーマンスコストがかかります。

ここに画像の説明を挿入

1.Yeildはマルチコルーチンを実現します

現在のプログラム開発にはシステムレベルの処理制御はありません。yieldの
使用方法を忘れ場合は、ここをクリックして
LiaoXuefengの

# 生产者
def producer(cons):
    # 生产数据
    info = None;
    cons.send(info);
    for item in range(10):
        if item % 2 ==0:
            info = "title = 奥特曼,content = 奥特曼打怪兽";
        else:
            info = "title = 黑猫警长,content = 黑猫警长抓老鼠";
        print("【生产者:{}】".format(info));
        cons.send(info);

def consumer():
    while True:
        # 等待进行数据的接受
        receive = yield ;
        # 消费者输出信息
        print("【消费者:{}】".format(receive));
def main():

    con = consumer();
    producer(con);

if __name__ == '__main__':
    main();

2.greenletは、Pythonで提供されるマルチスレッド開発モジュールのサポートです
。pipinstallgreenletを手動でダウンロードする必要があります
次のコードは、sendとyieldが動作する必要がないことを示しています。

import greenlet,time
info = None;
def producer_handle():
    global info;
    for item in range(10):
        if item % 2 == 0:
            info = "title = 奥特曼,content = 奥特曼打小怪兽";
        else:
            info = "title = 黑猫警长,content = 黑猫警长抓小老鼠";
        print("【生产者】:{}".format(info));
        # 模拟业务逻辑处理
        time.sleep(1);
        # 切换到消费端;
        consumer_greenlet.switch();

def consumer_handle():
    while True:
        print("【消费者】:{}".format(info));
        time.sleep(1);
        # 切换到生产端
        producer_greenlet.switch();
# 定义协程切换函数
producer_greenlet = greenlet.greenlet(run=producer_handle);
# 定义协程切换函数
consumer_greenlet = greenlet.greenlet(run=consumer_handle);

def main():
    producer_greenlet.switch();

if __name__ == '__main__':
    main();

3.geventサードパーティモジュールとgreenletgreenletの
違いは、生産と消費
を手動で切り替える必要があります。geventは自動的にpip install geventをダウンロードする必要
があります。これはサンプルコードです。これはtrueであるため、常に最後のメッセージを消費します。

import gevent
info = None;
def producer_handle():
    global info;
    for item in range(10):
        if item % 2 == 0:
            info = "title = 奥特曼,content = 奥特曼打小怪兽 ,{}".format(item);
        else:
            info = "title = 黑猫警长,content = 黑猫警长抓小老鼠 ,{}".format(item);
        print("【生产者】:{}".format(info));
        # 切换延迟
        gevent.sleep(1);

def consumer_handle():
    while True:
        print("【消费者】:{}".format(info));
        # 切换延迟
        gevent.sleep(1);

def main():
    # 定义协程对象
    producer_gevent = gevent.spawn(producer_handle);
    # 定义协程对象
    consumer_gevent = gevent.spawn(consumer_handle);
    producer_gevent.join();
    consumer_gevent.join();

if __name__ == '__main__':
    main();

実際、Pythonは絶えず改善され、いくつかの新機能が導入されていることがわかります。初心者やコンピューターハードウェアを理解していない人にとっては、Pythonはますます親しみやすくなり、書き込みが減り、作業が増えています。

おすすめ

転載: blog.csdn.net/weixin_44887276/article/details/114882099