• python协程


    线程和进程的操作是由程序触发系统接口,最后的执行者是系统,协程的操作则是人为。

    协程存在的意义:对于多线程应用,cpu通过切片的方式来切换线程间的执行,线程切换时需要耗时(保存状态,下次继续)。协程则只使用一个线程,在一个线程中规定某个代码块执行顺序。

    协程的使用场景:当程序中存在大量不需要cpu的操作时(IO),适用于协程。

    greenlet:需要提前安装(pip3 install greenlet,安装完greenlet后gevent也就安装上了)

    from greenlet import greenlet
    
    
    def foo1():
        print('I am foo1-gl1')
        gl2.switch()
        print('Who am I?')
        gl2.switch()
    
    
    def foo2():
        print('I am foo-gl2')
        gl1.switch()
        print('Who am I?.')
    
    
    gl1 = greenlet(foo1)
    gl2 = greenlet(foo2)
    gl1.switch()
    print('end')
    greenlet
    import gevent, time
    
    
    def foo():
        print('Running in foo')
        gevent.sleep(0)     #通过sleep去切换到另一个任务
        print('Explicit context switch to foo again.')
    
    
    def bar():
        print('Explicit context switch to back to bar')
        gevent.sleep(1)
        print('我睡醒了')
    
    
    def func():
        print('Explicit context switch to func.')
        gevent.sleep(0)
        print('I am come back')
    
    gevent.joinall([
        gevent.spawn(foo),
        gevent.spawn(bar),
        gevent.spawn(func),
    ])
    gevent

    遇到IO操作自动切换:

    # monkey.patch_all()为将原来socket修改为自己的socket去发送http请求
    from gevent import monkey; monkey.patch_all()
    import gevent, requests
    
    
    def f(url):
        print('Get: ',url)
        resp = requests.get(url)
        data = resp.text
        with open('test', 'w', encoding='utf-8') as f:
            f.write(data)
        print('%d bytes recceved from %s' % (len(data), url))
    
    gevent.joinall([
        gevent.spawn(f, 'https://www.baidu.com/'),
        gevent.spawn(f, 'https://www.yahoo.com/'),
        gevent.spawn(f, 'https://www.github.com/'),
    ])
  • 相关阅读:
    javascritp对fckeditor编辑器赋值取值
    [.net]发布基于C#与Flash通信的游戏设计器完整项目及源代码下载
    Sun VirtualBox更新到3.0.8.53138
    JavaScript强弹代码
    给Repeater、Datalist和Datagrid增加自动编号列
    Adobe发布新版Photoshop.com 支持iPhone
    网站免费提交搜索引擎入口地址?
    利用FMS做在线视频录制
    Apache Lucene 2.9的改进
    KDE 4.3.2 发布
  • 原文地址:https://www.cnblogs.com/caibao666/p/6773135.html
Copyright © 2020-2023  润新知