首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python并发编程之实战异步IO框架:asyncio 下篇

大家好, 进入第十一章。

前面两节,我们讲了协程中的和

这节我们将通过一个小实战,来对这些内容进行巩固。

在实战中,将会用到以下知识点:

多线程的基本使用

Queue消息队列的使用

Redis的基本使用

asyncio的使用

.动态添加协程

在实战之前,我们要先了解下在asyncio中如何将协程态添加到事件循环中的。这是前提。

如何实现呢,有两种方法:

主线程是的

由于是同步的,所以总共耗时6+3=秒.

输出结果

主线程是的,这是重点,一定要掌握。。

输出结果

由于是同步的,所以总共耗时max(6, 3)=秒

.实战:利用redis实现动态添加任务

对于并发任务,通常是用生成消费模型,对队列的处理可以使用类似master-worker的方式,master主要用户获取队列的msg,worker用户处理消息。

为了简单起见,并且协程更适合单线程的方式,我们的主线程用来监听队列,子线程用于处理队列。这里使用redis的队列。主线程中有一个是无限循环,用户消费队列。

先安装Redis

到https://github.com/MicrosoftArchive/redis/releases下载

解压到你的路径。

然后,在当前路径运行cmd,运行redis的服务端。

服务开启后,我们就可以运行我们的客户端了。

并依次输入key=queue,value=5,3,1的消息。

一切准备就绪之后,我们就可以运行我们的代码了。

稍微讲下代码

:单独的线程,运行着一个事件对象容器,用于实时接收新任务。

:单独的线程,实时接收来自Redis的消息队列,并实时往事件对象容器中添加新任务。

输出结果

我们在Redis,分别发起了,,的任务。

从结果来看,这三个任务,确实是并发执行的,的任务最先结束,三个任务完成总耗时

运行后,程序是一直运行在后台的,我们每一次在Redis中输入新值,都会触发新任务的执行。。

好了,经过这个实战内容,你应该对的实际应用有了一个更深刻的认识了,至此,你已经可以使用来实现任务的并发。快去体验一下。如果有什么疑问,请在后台加我微信与我联系。。

每日分享Python进阶课程

快关注一下,成为Python高手

感谢阅读,原创不易,点个赞唄。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180601G07MKT00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券