Py学习  »  python开源

python进阶之异步任务

夏天 • 5 年前 • 418 次点击  

​​​0.导语1.yield关键字2.异步加载asyncio第一种方式第二种方式

python进阶之异步任务 0.导语 本文学习视频来自莫凡python,下面是总结的学习内容。 关于星球,我在稍微阐述一点,我用自己的精力在星球中发布小项目,发布日打卡,共同来学习某一块知识,所以改为收费模式,希望通过收费可以筛选出一波真正想学习的人,共同坚持,就像公众号一样,屹立不倒,昨天立了个flag,每日分享一条消息或文字或技术,共同坚持学习!

更多干货分享加python编程语言学习QQ群 515267276

1.yield关键字yield类似于return, 但不同之处在于它返回的是生成器!

生成器

生成器是通过一个或多个yield表达式构成的函数。每一个生成器都是一个迭代器(但迭代器不一定是生成器)。

生成器并不会一次返回所有结果,而是每次遇到yield关键字后返回相应结果,并保留函数当前的运行状态。等待下一次的调用。

由于生成器也是一个迭代器,那么它就应该支持next方法来获取下一个值。 除此之外,生成器还支持send函数,该函数可以向生成器传递参数。

基本操作

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()

loop.close()

第二种方式 更多干货分享加python编程语言学习QQ群 515267276​ ​ 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()

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/27486
 
418 次点击