博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python实现协程的三种方式
阅读量:4287 次
发布时间:2019-05-27

本文共 1368 字,大约阅读时间需要 4 分钟。

1.使用yield 来实现协程

import asyncioimport timeasync def job(t):                   # async 形式的功能    print('Start job ', t)    await asyncio.sleep(t)          # 等待 "t" 秒, 期间切换其他任务    print('Job ', t, ' takes ', t, ' s')    async def main(loop):                       # async 形式的功能    tasks = [    loop.create_task(job(t)) for t in range(1, 3)    ]                                       # 创建任务, 但是不执行    await asyncio.wait(tasks)               # 执行并等待所有任务完成t1 = time.time()loop = asyncio.get_event_loop()             # 建立 looploop.run_until_complete(main(loop))         # 执行 loop,并且等待所有任务结束loop.close()                                # 关闭 loopprint("Async total time : ", time.time() - t1)

执行结果:

Start job  1

Start job  2
Job  1  takes  1  s
Job  2  takes  2  s
Async total time :  2.01411509513855
 

2. 使用greenlet 模块,通过switch来切换不同的代码块协程运行

from greenlet import greenletdef foo():    print("foo")    bar()def bar():    a = 3 + 1    print(a)    gr2.switch()    print("end bar")gr1 = greenlet(bar)gr2 = greenlet(foo)gr1.switch()

执行结果:

4

foo
4
end bar

3.使用gevent 模块实现协程

import requests

import gevent
def f(url):
    print('GET: %s' % url)
    data = requests.get(url).text
    print('%d bytes received from %s.' % (len(data), url))
gevent.joinall([
    gevent.spawn(f, 'https://www.python.org/'),
    gevent.spawn(f, 'https://www.yahoo.com/'),
    gevent.spawn(f, 'https://github.com/'),
])
print("End of File")

执行结果:

转载地址:http://fkagi.baihongyu.com/

你可能感兴趣的文章
【王菲机场背3万LV包 气场压过代言人范爷】
查看>>
【可疑代码扫描器V0.12最新绿色版】
查看>>
【色空win7动漫美女诱惑主题】
查看>>
【美女送福利了win7主题】
查看>>
【解析关电脑后CPU风扇转不停问题】
查看>>
【内网不正常引起死机解决办法】
查看>>
【5步搜索到无线网卡信号】
查看>>
优酷客户端3.8.0 [优酷客户端官方正式版]
查看>>
【还原win7系统默认字体的方法】
查看>>
重庆一号通V2011官方版[新型电信服务]
查看>>
【图文】教你设置Win8系统中家长控制
查看>>
【主题世界】阿狸对着你卖萌桌面主题
查看>>
【加密桌面便签】V1.1正式版简体中文
查看>>
【Windows7系统装什么浏览器好用】
查看>>
看图纸V3.2.1正式版[看图纸正式版下载]
查看>>
【图文解决win7系统C盘空间不够用】
查看>>
【win7系统怎样进去登陆界面】
查看>>
【win7无法识别u盘的解决办法】
查看>>
【布谷鸟来客提醒V4.0 官方版】淘宝店铺监控软件
查看>>
【教你修复win7下IE8主页被篡改的方法】
查看>>