greenlet 模块实现协程:
from greenlet import greenlet
def fun1():
print(1) #2
gr2.switch()#3
print(2) #6
gr2.switch()#7
pass
def fun2():
print(3) #4
gr1.switch()#5
print(4) #8
pass
gr1=greenlet(fun1)
gr2=greenlet(fun2)
gr1.switch() #1
yield关键字多协程:
def fun1():
yield 1
yield from fun2()
yield 2
def fun2():
yield 3
yield 4
f1=fun1()
for item in f1:
print(item)
asyncio:
import asyncio
@asyncio.coroutine
def fun1():
print(1)
yield from asyncio.sleep(1)
print(2)
@asyncio.coroutine
def fun2():
print(3)
yield from asyncio.sleep(2)
print(4)
tasks=[
asyncio.ensure_future(fun1()),
asyncio.ensure_future(fun2())
]
loop=asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))
#遇到io阻塞自动切换
async & await关键字:
import asyncio
async def fun1():
print(1)
await asyncio.sleep(1)
print(2)
async def fun2():
print(3)
await asyncio.sleep(2)
print(4)
tasks=[
asyncio.ensure_future(fun1()),
asyncio.ensure_future(fun2())
]