python 多进程-04 协程

  1. 协程是程序员创造出来的
  2. 单纯的协程没有作用
  3. 需要io操作时候进行切换 才有意义

原理 greenlet

import greenlet


def f1():
    print(11)
    gr2.switch()
    print(33)
    gr2.switch()


def f2():
    print(22)
    gr1.switch()
    print(44)


if __name__ == '__main__':
    """
    1. 协程是程序员创造出来的
    2. 单纯的协程没有作用
    3. 需要io操作时候进行切换 才有意义
    """
    gr1 = greenlet.greenlet(f1)
    gr2 = greenlet.greenlet(f2)

    gr1.switch()

协程常用模块 gevent

from gevent import monkey
monkey.patch_all()  # 以后代码中遇到IO都会自动执行greenlet 的 switch 进行切换
import requests
import gevent # 在money 之后导入

def get_page(url):
    ret = requests.get(url)
    print(url, ret.content)


if __name__ == '__main__':
    gevent.joinall([
        gevent.spawn(get_page, 'https://www.python.org'),
        gevent.spawn(get_page, 'https://www.baidu.com'),
        gevent.spawn(get_page, 'https://github.com'),
    ])

posted @ 2020-03-11 15:42  hurz  阅读(164)  评论(0编辑  收藏  举报