python中await async_python的asyncio,async,await

并行是同时执行,并发是极快速的交替执行。

Asyncio 是并发的一种方式。对 Python 来说,并发还可以通过线程(threading)和多进程(multiprocessing)来实现。

Asyncio 并不能带来真正的并行(parallelism)。当然,因为 GIL(全局解释器锁)的存在,Python 的多线程也不能带来真正的并行。

可交给 asyncio 执行的任务,称为协程(coroutine)。一个协程可以放弃执行,把机会让给其它协程(即 yield from 或 await)。yield是比较老的,他们的联系这就不多BB,也没啥用,直街开始await也没有关系。

1.定义协程,函数前加上async。

async def sleep_second(x):

await asyncio.sleep(x)

return '3 secoonds'

这个协程就是睡眠几秒,耗时操作前用await,表示等待一个另一个协程结束。

2.运行协程

第一种:在另一个运行的协程中用await等待它;第二种:通过ensure_future函数计划执行。

协程需要loop运行,协程才能运行。

loop = asyncio.get_event_loop()

loop.run_until_complete(sleep_second(3))

run_until_complete是一个阻塞调用,知道协程运行结束它才返回。它会把传给它的协程对象检查,然后通过ensure_future函数把协程包装成future。

3.增加回调函数

def done_callback(fun):

print('sleep over,{}'.format(fun.result))

这里注意,定义回调函数要个形参数,接受的回调他的future,future.result可以取有return结果的future。

futu = asyncio.ensure_future(sleep_time(3))

futu.add_done_callback(done_callback)

loop = asyncio.get_event_loop()

loop.run_until_complete(futu)

4.多个协程

使用asyncio.gather函数

loop.run_until_complete(asyncio.gather(time_sleep(3),time_sleep(3)))

或者放在列表传进去

coros = [time_sleep(1), time_sleep(3)]

loop.run_until_complete(asyncio.gather(*coros))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值