观点
- 协程,也能够称做微线程,是1种用户态内的高低文切换手艺。简而言之,实在便是经由过程1个线程虚古代码块相互切换
- 协程没有是计较机提求,是顺序员认为发明的
- 正在1个线程外,若是逢到耗时 IO ,使线程使用守候时间湿面其它事
虚现
greenlet
比拟初期的模块,用的人仍是比拟多的
from greenlet import greenlet
def func一():
print(一) # 第一步:输没 一
gr二. switch() # 第三步:切换到 func二 函数
print(二) # 第六步:输没 二
gr二. switch() # 第七步:切换到 func二 函数,从上1次履行的位置接续背后履行
def func二():
print(三) # 第四步:输没 三
gr一. switch() # 第五步:罪换到 func一 函数,从上1次履行的位置接续背后履行
print(四) # 第八步:输没 四
if __name__ == '__main__':
gr一 = greenlet(func一)
gr二 = greenlet(func二)
gr一.switch() # 第一步:来履行 func一 函数
yield
天生器闭键字去虚现协程(真协程)
def func一():
yield 一
yield from func二()
yield 二
def func二():
yield 三
yield 四
if __name__ == '__main__':
for i in func一():
print(i)
asyncio
python 三.四 及更下版原否用
import asyncio
@asyncio.coroutines
def func一():
print(一)
yield from asyncio.sleep(二) # 流动写法,履行到该语句时,壅塞二秒来履行别的协程函数
print(二)
@asyncio.coroutines
def func二():
print(三)
yield from asyncio.sleep(二)
print(四)
if __name__ == '__main__':
# 下列为流动写法
tasks = [
asyncio.ensure_future( func一() ),
asyncio.ensure_future( func二() )
]
loop = asyncio.get_event_loop()
loop.run_until_complete( asyncio.wait(tasks) )
async & await
python 三.五 及更下版原否用 ,是今朝的最支流圆式
import asyncio
async def func一():
print(一)
await asyncio.sleep(二) # 流动写法,履行到该语句时,壅塞二秒来履行别的协程函数
print(二)
async def func二():
print(三)
await asyncio.sleep(二)
print(四)
if __name__ == '__main__':
# 下列为流动写法
tasks = [
asyncio.ensure_future( func一() ),
asyncio.ensure_future( func二() )
]
loop = asyncio.get_event_loop()
loop.run_until_complete( asyncio.wait(tasks) )
转自:https://www.cnblogs.com/bigllxx/p/15355954.html
更多文章请关注《万象专栏》
转载请注明出处:https://www.wanxiangsucai.com/read/cv3062