Python 异步网络编程实战 - songcser - 掘金小册

小册介绍

第一部分是对 Python 协程的讲解,从字节码开始简单讲解了 Python 虚拟机的执行过程,可以大体了解到 Python 协程的执行过程。 第二部分是 Python 中 CS 架构的概念讲解和套接字 Socket 的基本用户。 第三,四部分介绍了 Linux 下的五种 I/O 模型,并且使用 Python 的 select 模块提供的接口,实现 Select,Poll,Epoll 这三种模型的服务端。 这三部分分别介绍了 Python 中的协程,Socket,异步 I/O ,介绍的知识点比较多,能够对基础知识有较深的理解 第五,六,七部分,讲解的网络爬虫,从简单的同步方法,到异步方法,最后结合协程,实现了一个即性能高又实现简单的爬虫。从简单到复杂,一步一个实现,最后完成一个性能强大的爬虫,整个的讲解比较清晰,能先循渐进的理解整个实现过程 第八,九,十部分讲解了 greenlet 实现协程,和 gevent 的大体结构实现。这里可以了解 gevent 的大体实现过程,对于 gevent 的执行过程有个大体的了解

你会学到什么?

近年来 Python 的发展的非常迅速,“简单”、“高效”是 Python 吸引人的一大特色。在国内 Python 开发需求越来越大,Python 具有丰富强大的库,现在各个领域都在广泛使用,从 Web 开发,到运维开发,到机器学习,到人工智能,Python 都有广泛的应用。学习 Python 几乎可以做任何事情,对自己的编程技能会有很大的提升

Python 是一种解释性语言,语法简单易用,上手较快,代码优雅。Python 的开发效率很高,也是大多数开发选择 Python 的原因。但是 Python 的一个缺点就是性能比较差,对于 Web 开发,性能是比较重要的指标。而在解决性能方面,Python 出现了一些第三方异步网络框架,如 Tornado,Twisted,Gevent,是比较流行异步框架。在 Python 官方也正式推出了 Asyncio 库,在这个库上面也出现了大量的 Web 框架。性能方面有了很大的提升。对于做 Web 开发的人员来说,可能会用到一些异步框架,但是不理解里面的实现原理。本课程讲解 Python 异步实现,从简单的原理开始讲解,其中会涉及到很多的知识点,协程,Socket,异步 I/O,爬虫,会跟着一个一个的实验,慢慢实现一个性能强大的爬。

  1. 第一节讲解 Python 中函数的运行过程,将代码编译成字节码,了解字节码的运行流程和运行时调用栈。学习生成器函数的字节码执行过程,和整体的调用流程。

  2. 第二节介绍了 C/S 架构,讲解 Socket 的实现过程,客户端和服务端使用 Python 的实现过程。服务端不断接收消息,客户端不断发送消息。

  3. 第三节和第四节主要讲解 IO 多路复用,Linux下的五种 IO 模型和各自的原理特点。IO 多路复用主要有三种实现方式,使用 Python 的 select 模块提供的接口,根据Select, Poll, Epoll(Kqueue)实现服务端的流程。

  4. 第五节是三个简单的图片爬取程序,分别使用了同步阻塞方式,多线程方式,I/O异步方式。三种实现方式都有各自的优点和缺点。

  5. 第六节是讲解使用回调方法的缺点,并且使用异步协程实现爬虫,使用简单的 Loop,Future,Task 等方式实现爬虫,避免了大量的回调方法,结构更加清晰一点。

  6. 第七节是讲解 yield from 的使用方式和运行原理,使用 AsyncSocket 类将客户端套接字及其方法进行封装,使用 yield from 做桥梁,调用者可以通过该语法结构和子协程进行数据交流。

  7. 第八节讲解了异步事件库,介绍Libevent,Libev,Libuv几个事件库的特点。pyuv 是为 libuv 提供了 python 模块的接口,使用 pyuv 来实现异步爬虫。

  8. 第九节实现了简单的 EventLoop,Task 不断驱动协程执行,EventLoop 监听事件循环,又不断驱动 Task 执行,Future 在协程的通道中传输数据,几个部分配合合作完成整个流程。

  9. 第十节简单介绍了装饰器,然后讲解 asyncio.coroutine 的实现原理和实现异步爬虫。最后在实现的异步爬虫,使用 async 和 await 关键字。至此实现了一个简单的 asyncio,对 asyncio 的几个比较重要的模块做了简单的实现,便于理解 asyncio 的原理。

  10. 第十一节讲解 greenlet 的使用原理,greenlet 框架是 C 语言实现的一个 Python 扩展,在协程调用时会有上下文的切换,属于微线程,但比真正的线程资源占用少。使用 greenlet 代替 yield 协程实现爬虫。

  11. 第十二节和第十三节讲解 gevent 的实现流程。gevent是基于 greenlet 实现异步调用。实现Watch,Loop,Hub,Waiter 等几个主要的模块。能大体了解 gevent 内部的实现过程。

  12. 第十四节讲解 gevent 可以在不改变原有源代码的基础上,将同步执行修改成异步执行。使用 Monkey Patch 的方式实现,对代码改造影响很小,性能却有大量提升。

通过本小册的学习,不仅仅是让你掌握基本的 Python 异步开发,同时会了解其中的实现原理,并且会接触到 Python 字节码,协程,Socket 编程,Liunx I/O 模型,爬虫实现,Gevent 原理。 将会接触到很多的知识点,对于自己的知识面提升有很大的帮助。在以后的开发中,不仅知道实现的方法,还能知道实现的原理,这样才能更快的开发出健壮的应用。

  • 本课程知识点较多,学习过程中,需要有一定的 Python 基础
  • 需要具有 Python 网络编程基础和爬虫基础
  • 本课程结构比较清晰,按照从易到难,先循渐进讲解整个实现过程
  • 学习后可以提升大家对于知识的理解和掌握,在以后的开发中能有更加深入的理解

适宜人群

  • 从事 Python Web 开发的技术人员
  • 对 Python 感兴趣,想了解 Python 异步实现过程
  • 在开发过程中,想使用异步方式提升 Python 性能的开发者

Python 异步网络编程实战相关推荐

  1. python网络编程实战_Python 异步网络编程实战

    近年来 Python 的发展的非常迅速,"简单"."高效"是 Python 吸引人的一大特色.在国内 Python 开发需求越来越大,Python 具有丰富强大 ...

  2. 《Python数据可视化编程实战》——5.5 用OpenGL制作动画

    本节书摘来异步社区<Python数据可视化编程实战>一书中的第5章,第5.5节,作者:[爱尔兰]Igor Milovanović,更多章节内容可以访问云栖社区"异步社区" ...

  3. 《Python数据可视化编程实战》—— 1.6 安装图像处理工具:Python图像库(PIL)...

    本节书摘来异步社区<Python数据可视化编程实战>一书中的第1章,第1.6节,作者:[爱尔兰]Igor Milovanović,更多章节内容可以访问云栖社区"异步社区" ...

  4. python的requests模块功能_《Python数据可视化编程实战》—— 1.7 安装requests模块-阿里云开发者社区...

    本节书摘来异步社区<Python数据可视化编程实战>一书中的第1章,第1.7节,作者:[爱尔兰]Igor Milovanović,更多章节内容可以访问云栖社区"异步社区" ...

  5. 《Python数据可视化编程实战》—— 1.3 安装virtualenv和virtualenvwrapper

    本节书摘来异步社区<Python数据可视化编程实战>一书中的第1章,第1.3节,作者:[爱尔兰]Igor Milovanović,更多章节内容可以访问云栖社区"异步社区" ...

  6. 《Python数据可视化编程实战》—— 1.2 安装matplotlib、Numpy和Scipy库

    本节书摘来异步社区<Python数据可视化编程实战>一书中的第1章,第1.2节,作者:[爱尔兰]Igor Milovanović,更多章节内容可以访问云栖社区"异步社区" ...

  7. Netty网络编程实战2,使用Netty开发聊天室功能

    目录 一.服务端 1.主程序类 2.自定义初始化器 3.自定义处理器 二.客户端 1.主程序类 2.自定义初始化器 3.自定义处理器 三.启动服务端.客户端 1.服务端:你好,我是服务端,哪吒编程 2 ...

  8. Qt网络编程实战之HTTP服务器-安晓辉-专题视频课程

    Qt网络编程实战之HTTP服务器-30196人已学习 课程介绍         设计了一个实用的HTTP服务器,基于Qt的网络框架实现.先详细介绍Qt的网络.IO.线程..自定义事件.配置文件等类库的 ...

  9. python qt gui与数据可视化编程 kindle_Kindle Python教程 电子书 – Python数据可视化编程实战 PDF...

    简介 : < 全书共8章,分别介绍了准备工作环境.了解数据.绘制并定制化图表.学习更多图表和定制化.创建3D可视化图表.用图像和地图绘制图表.使用正确的图表理解数据以及更多matplotlib知 ...

最新文章

  1. LSTM之父:吐槽了两年,来划划重点:“这5篇最高引论文都源于我们。”
  2. 雷军写代码水平如何?
  3. Visual Basic 2005 - 如何将色彩字符串转换成 Color 结构
  4. 是什么浪费了我的时间
  5. 基于 Rancher 的企业 CI/CD 环境搭建
  6. vue github开源项目_11月份Github上最热门的开源项目
  7. R中rJava包载入时报错的问题
  8. mysql和hive的sql语句,hive中使用sql语句需要注意的事项
  9. 等差数列划分Python解法
  10. {}企业如何才能实现多方位网络营销
  11. MySQL报错113_mysql 2003 (113)
  12. java settcpnodelay_Python Twisted TCP socket如何设置TCP的NODELAY(禁用Nagle算法)?
  13. java语言中json转换,JSON字符串和JAVA语言对象的相互转换教程
  14. 数据消费过程_如何优雅地规划数据仓库体系
  15. tex中让公式和文字在一行_1行代码搞定LaTeX公式编写,这个4.6M的Python小插件,堪称论文必备神器...
  16. redis数据库无法写入导致的bug
  17. 常用HDFS java API
  18. 基于范围的for循环
  19. 输入身份证自动回填地址,年龄,个人详细信息
  20. C语言常量与变量的使用

热门文章

  1. CCF201512-2 消除类游戏(100分)
  2. 【STM32】LED初始化基础以及基本使用方法(CT117E电路)
  3. Kruskal Algorithm 克鲁斯卡尔算法
  4. ThreadLocal源码解读 侵立删
  5. java 图像 截取正方形,在java中裁剪矢量图像
  6. 低代码能够为企业带来什么?
  7. simhash mysql_海量数据相似度计算之simhash和海明距离
  8. 计算机网络做网线,用网线直接把两台电脑联接,怎样做网线
  9. Android之解压缩ramdisk文件系统
  10. JAVA(android)提取WIFI客流探针MAC地址源码