多进程:

多线程和多进程的区别:

Python多线程不适合CPU操作密集型的任务,适合IO操作密集型的任务(IO操作不占用CPU)

Python折中解决多线程不能真正同步运算的方案是:起多个进程,每个进程中的线程都可以同时在多核中运行,缺点是不能共享内存数据。

协程:微线程,用户自己控制,CPU不切换。举例:yield就是协程的一种实现

  遇到IO操作就切换

Gevent是一个第三方库,可以轻松通过gevent实现高效同步或异步编程。在Gevent中用到的主要模式是Greenlet。它是以C扩展模块形式接入Python的轻量级协程。Greenlet全部运行在主程序操作系统的进程内部。但他们被协作式的调度。

论事件驱动与异步IO:

通常,我们写服务器处理模型的程序时,有以下几种模型:

1 每收到一个请求,都启动一个进程

2 每收到一个请求,都启动一个线程

3 每收到一个请求,放入一个事件列表,让主进程通过非阻塞I/O方式来处理请求(协程)

上面几种方式:各有千秋:

1,由于创建新的进程的开销比较大,所以会导致服务器性能比较差,但实现比较简单。

2,由于要设计到线程的同步,有可能会面临死锁等问题。

3,在写应用程序代码是,逻辑比前两种都复杂。

综合考虑各方面因素,一般普通使用第三种方式进行网络服务器程序编写

在Linux下分析Socket多并发各种实现模型的效率分析:

1  阻塞模型  在数据接收时等待、等待数据从内核内存copy到用户内存中等待时会卡住

2  非阻塞模型  在等待数据从内核内存copy到用户内存中等待时会卡住

3  同步/O多路复用  就是我们说的select,poll,epoll,有些地方也成这种IO方式为event driven IO。select/epoll的好处就是在于单个process就可以同时处理多个网络连接的IO。它的基本原理就是select,poll,epoll这个function会不断的轮训所负责的所有socket,当某个socket有数据到达了,就通知用户进程。

4  信号驱动IO  在请求数据时,给予请求,不需要等待,可以做其他事情,带请求数据准备好了,回送一个信号以驱动再次过来取数据。

5  异步IO  其实用的很少,先看一下它的进程:

  只需告知要求数据的请求,然后请求进程就可以去做自己的事情,服务器会帮助请求数据,数据从系统内核转存到用户内存,然后送给请求的进程,最后给进程发送一个完成的信号。效率达到最高。

异步IO实例:select解析Socket实例  请参见80180814

      另一种实现:用selectors实现

本节作业:  用select或者selectors完成FTP上传下载的多并发效果

Python3.5 学习十的更多相关文章

  1. Python3.5 学习十九 Django分模块讲解 MTV+URL

    本节内容概述: 表单提交的Method使用规则:get 获取数据 post提交数据 单选使用get 多选使用getlist request.POST.getlist("favor" ...

  2. Python3.5学习十八 Python之Web框架 Django

    Python之Web框架: 本质:Socket 引用wsgiref创建web框架 根据web框架创建过程优化所得: 分目录管理 模板单独目录 执行不同函数单独存入一个方法py文件 Web框架的两种形式 ...

  3. Python3.5 学习十二 数据库介绍

    MYSQL介绍: 主流三种数据库:Oracle.Mysql.Sqlserver Mysql安装和启动: windows 1安装 2启动服务 3进入bin目录,打开命令行 4 mysqladmin -u ...

  4. python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例

    python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...

  5. 从零开始学习PYTHON3讲义(十五)让画面动起来

    <从零开始PYTHON3>第十五讲 虽然看起来绘图和音乐并不相关,但是听过了上一讲的内容你一定知道,这是游戏编程中四个需要处理内容的两部分,这两部分必须同时.并行的处理,不能因为某一项计算 ...

  6. 从零开始学习PYTHON3讲义(十四)写一个mp3播放器

    <从零开始PYTHON3>第十四讲 通常来说,Python解释执行,运行速度慢,并不适合完整的开发游戏.随着电脑速度的快速提高,这种情况有所好转,但开发游戏仍然不是Python的重点工作. ...

  7. 从零开始学习PYTHON3讲义(十二)画一颗心送给你

    (内容需要,本讲使用了大量在线公式,如果因为转帖网站不支持公式无法显示的情况,欢迎访问原始博客.) <从零开始PYTHON3>第十二讲 上一节课我们主要讲解了数值计算和符号计算.数值计算的 ...

  8. 从零开始学习PYTHON3讲义(十)自己做一个“电子记事本”

    <从零开始PYTHON3>第十讲 截至上一讲,我们已经完成了Python语言的基本部分.我们用了三讲来讨论Python语言的控制结构,用了两讲来介绍Python的基本数据类型.可以说仅就语 ...

  9. python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置

    python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置Download JetBrains Python IDE :: PyCharmhttp://www. ...

随机推荐

  1. 【原创】有关Silverlight中异常“XmalParseEception” 通用解决思路

    针对于 此类 XamlParse问题,大部分都是 silverlight/WPF 前段 xmal文件问题,仔细逐行审查 接口解决.

  2. DNA甲基化研究概述

    DNA甲基化研究概述 生信技能树 已关注 2018.01.23 11:43 字数 993 阅读 183评论 0喜欢 1 DNA甲基化(DNA methylation)是最早被研究的重要表观遗传修饰之一 ...

  3. Python图像处理库:Pillow 初级教程-乾颐堂

    Image类 Pillow中最重要的类就是Image,该类存在于同名的模块中.可以通过以下几种方式实例化:从文件中读取图片,处理其他图片得到,或者直接创建一个图片. 使用Image模块中的open函数 ...

  4. dbutils封装对象,单列,一行一列(用)

    基本用法:查找并封装对象与对象集合 public User findUserByNamePassword(String name,String password){ QueryRunner runne ...

  5. Django介绍(2)

    https://www.cnblogs.com/yuanchenqi/articles/5658455.html

  6. Linux下一个简单sniffer的实现

    Sniffer(嗅探器)是一种基于被动侦听原理的网络分析方式.将网络接口设置在监听模式,便可以将网上传输的源源不断的信息截获.对于网络监听的基本原理我们不在赘述,我们也不开启网卡的混杂模式,因为现在的 ...

  7. Unable to load tag handler class "com.showId.Id.ShowId" for tag "ShowId:ShowId"] with root cause错误的解决方案

     严重: Servlet.service() for servlet [jsp] in context with path [/Biaoqian] threw exception [/1.jsp (l ...

  8. java.lang.NoClassDefFoundError Could not initialize class 异常的处理

    class,forname的配置文件出问题核对url数据库中的名字和bean中名字不同没有把jar包变成build path

  9. POJ 1061 青蛙的约会(扩展欧几里德算法)

    题意:两只青蛙在同一个纬度上跳跃,给定每个青蛙的开始坐标和每秒跳几个单位,纬度长为L,求它们相遇的最短时间. 析:开始,一看只有一组数据,就想模拟一下,觉得应该不会超时,但是不幸的是TLE了,我知道这 ...

  10. HDU 1106 排序 (排序+处理字符串)

    题意:略. 析:按照题目说的,把字符串分割,然后把字符串转成十进制,存起来,可以用数组,我用的向量, 排序一下就OK了.注意的是,要考虑多个5相邻的时候,刚开始没考虑WA了一次. 代码如下: #inc ...