0.导语1.yield关键字2.异步加载asyncio第一种方式第二种方式
本文学习视频来自莫凡python,下面是总结的学习内容。 关于星球,我在稍微阐述一点,我用自己的精力在星球中发布小项目,发布日打卡,共同来学习某一块知识,所以改为收费模式,希望通过收费可以筛选出一波真正想学习的人,共同坚持,就像公众号一样,屹立不倒,昨天立了个flag,每日分享一条消息或文字或技术,共同坚持学习!
yield类似于return, 但不同之处在于它返回的是生成器!
生成器
# 基本操作
def fun():
for i in range(10):
yield i
f = fun()
# 通过for循环+next进行调用
for i in range(10):
print(next(f))
print('-----------------------------')
def func():
n = 0
while 1:
n = yield n
f = func()
print(next(f))
print('------------------------------')
print(f.send(5)) # n赋值为5
def func(number):
while True:
yield number
number += 1
f = func(1)
print('------------------------------')
# 取出10个数
for i in range(10):
print(next(f))
# 生产消费模式
print('------------------------------')
def consumer():
r = ''
while True:
n = yield r
if not n:
return
print('[CONSUMER] Consuming %s...' % n)
r = '200 OK'
def produce(c):
c.send(None)
n = 0
while n < 5:
n = n + 1
print('[PRODUCER] Producing %s...' % n)
r = c.send(n)
print('[PRODUCER] Consumer return: %s' % r)
c.close()
c = consumer()
produce(c)
asyncioasyncio可以实现单线程并发IO操作 async和await是针对coroutine的新语法,要使用新的语法,只需要做两步简单的替换: 把@asyncio.coroutine替换为async; 把yield from替换为await。
import asyncio
@asyncio.coroutine
def hello():
print("Hello world!")
r = yield from asyncio.sleep(1)
print("Hello again!")
loop = asyncio.get_event_loop()
loop.run_until_complete(hello())
loop.close()
async def hello2():
print('Hello world2!')
r = await asyncio.sleep(1)
print('Hello again2!')
loop = asyncio.get_event_loop()
loop.run_until_complete(hello2())
loop.close()