断点续传

 
python2.7 多继承  py35多继承
 
socketserver源码
    支持并发处理socket
 
i/o多路复用
 

上节回顾
    socket 
        1.导入模块
        2.创建socket
        3. send      不一定全部发送完成    会有个返回值:发送多少字节
            sendall  内部调用send   会把数据全部发送完成
    粘包:ack
    socketserver
        1.自定义类
        2.必须继承某个类
        3.重写handle方法
        4.调用socketserver构建对象
        5.forever运行

上节作业:
    断点续传:
        文件:
            a,追加  续传
            w,清空  重新上传
        文件指针:
            seek(num)
        文件名存在:以前上传过  服务端以a模式打开此文件
        获取字节大小num发给客户端
        客户端用seek(num)跳到续传点再发送
 

小知识点:
    作用域:python中无块级作用域
                        java/c#    有块级作用域
                        python/js   无块级作用域
                 if  1 == 1:
                     name="alex"
                 print(name)
                输出:alex
            python中是以“函数”为作用域的
作用域是由内往外的
在函数未执行前作用域已全部确定啦,作用域链已经生成
name="alex"
def f1():
print(name) def f2():
name="aric"
f1()
f2()

alex

name="alex"
def f1():
print(name) def f2():
name="aric"
return f1
ret=f2()
ret()

alex

解析:f1的作用域是自己函数内和全局
          f2的作用域是自己函数内和全局
          所以执行f1的时候先在函数f1里找,没有的话就找全局变量

新浪面试题:
li=[lambda :x for x in range(10)]
print(li[0]())

解析:先看下的例子:

li=[x for x in range(10)]
print(li)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
li:列表
for前面(x)是列表中的元素,x的取值是for循环取值的
再看前面的面试题:
li的元素是lambda :x,就是一个一个的函数,函数在调用之前是不执行的,所以在li[0]()之前lambda :x是不执行的,但是for x in range(10)一直在执行,最后值是9,li[0]()时lambda :x执行,:后面是lambda函数的返回值,这时的x是9,所以
print(li[0]())

执行结果是9

其实这个面试题就是下面的程序:
li=[]
for x in range(10):
def f1():
return x
li.append(f1)
print(li[0]())
print(li[1]())

9

9

多继承:
3:从左往右,深度优先,最后找祖宗       默认所有类都继承object类
2:从左往右,深度优先,一条道走到黑,如果继承object类的话就同3啦
在2中 不继承object类的话叫经典类
          继承object类的话新式类,3中的类全是新式类
 

多路复用:
中间的圈是多路复用,可看做是大堂经理
IO多路复用:监听socket对象内部是否变化
中间看视频
 
select方式是通过for循环来实现的,所以效率低,但是跨平台,还有个缺点是有限制?
poll方式是通过for循环来实现的,没有限制
epoll方式是通过socket对象有变化的话自己告诉epoll的方式实现的  nginx用的是epoll
 
IO多路复用不只是针对socket操作的,支持所有的IO操作
 

socketserver源码
 

多线程,多进程
1. 一个应用程序可以有多进程,多线程,默认是单进程,单线程
2.单进程,多线程
    py多线程:IO操作          不占用cpu    能提高并发 
                    计算性操作     占用cpu        不能提高并发(GIL)  所以要用多进程
3.GIL 全局解释器锁

python成长之路10的更多相关文章

  1. python成长之路10——socketserver源码分析

    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM,0) 参数一:地址簇 socket.AF_INET ipv4(默认) socket.AF_INE ...

  2. 【Python成长之路】Python爬虫 --requests库爬取网站乱码(\xe4\xb8\xb0\xe5\xa)的解决方法【华为云分享】

    [写在前面] 在用requests库对自己的CSDN个人博客(https://blog.csdn.net/yuzipeng)进行爬取时,发现乱码报错(\xe4\xb8\xb0\xe5\xaf\x8c\ ...

  3. (转)Python成长之路【第九篇】:Python基础之面向对象

    一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程-->错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个 ...

  4. 【Python成长之路】装逼的一行代码:快速共享文件

    [Python成长之路]装逼的一行代码:快速共享文件 2019-10-26 15:30:05 华为云 阅读数 335 文章标签: Python编程编程语言程序员Python开发 更多 分类专栏: 技术 ...

  5. python成长之路第三篇(1)_初识函数

    目录: 函数 为什么要使用函数 什么是函数 函数的返回值 文档化函数 函数传参数 文件操作(二) 1.文件操作的步骤 2.文件的内置方法 函数: 一.为什么要使用函数 在日常写代码中,我们会发现有很多 ...

  6. 我的Python成长之路---第一天---Python基础(1)---2015年12月26日(雾霾)

    2015年12月26日是个特别的日子,我的Python成之路迈出第一步.见到了心目中的Python大神(Alex),也认识到了新的志向相投的伙伴,非常开心. 尽管之前看过一些Python的视频.书,算 ...

  7. linux小白成长之路10————SpringBoot项目部署进阶

    [内容指引] war包部署: jar包部署: 基于Docker云部署. 一.war包部署 通过"云开发"平台初始化的SpringBoot项目默认采用jar形式打包,这也是我们推荐的 ...

  8. 我的Python成长之路---第三天---Python基础(10)---2016年1月16日(雾霾)

    二.collections collections是对Python现有的数据类型的补充,在使用collections中的对象要先导入import collections模块 1.Counter——计数 ...

  9. 我的Python分析成长之路10

    matplot数据可视化基础 制作提供信息的可视化(有时称作绘图)是数据分析中最重要任务之一. 1.图片(画布)与子图 plt.figure :创建一张空白的图片,可以指定图片的大小.像素. figu ...

随机推荐

  1. Delphi中Android运行和JNI交互分析

    Androidapi.JNIBridge负责和JNI交互.,既然要交互,那么首先就是需要获得JNI的运行环境,Android本身内置的就有一个Java(Dalvik)虚拟机.所以这个第一步就肯定是要这 ...

  2. CCNA实验(4) -- EIGRP

    enableconf tno ip do loenable pass ciscoline con 0logg syncexec-t 0 0line vty 0 4pass ciscologg sync ...

  3. 优步uber司机怎么注册不了?注册优步司机问题要点

    第一,可能是你的车型不符全要求,看是不是5年内的车型,同时要求车价8W以上:第二,你的驾驶年限不够,要求驾驶证年限1年以上的,如果不够的怎么办,告诉你个方法,PS啊!优步可查不了车管所的系统,所以这类 ...

  4. ubuntu apache fastcgi 虚拟主机安装

    1 cp /etc/apache2/sites-available/default /etc/apache2/sites-available/www.domain.com 这里www.domain.c ...

  5. Linux系统编程——进程调度浅析

    概述 操作系统要实现多进程.进程调度不可缺少. 有人说,进程调度是操作系统中最为重要的一个部分.我认为这样的说法说得太绝对了一点,就像非常多人动辄就说"某某函数比某某函数效率高XX倍&quo ...

  6. Unity cg vertex and fragment shaders(二)

    着色器的一般结构: Shader "MyShader/MyShaderName" { Properties { // ... properties here ... } SubSh ...

  7. 手机浏览器下IScroll中click事件

    产品的h5页面几乎都使用了iscroll插件,如果a标签在iscroll里,在部分手机浏览器中会出现无法点击的情况,不管是绑定click事件还是使用a标签的href属性.href属性偶尔还会能点击,c ...

  8. 有意思的C宏

    在Linux内核.嵌入式代码等传统的C代码里,会有一些难以识别的宏定义.我记得在eCos, UBoot, FFmpeg有一些比较BT的宏定义,很难读懂.对于C++程序员来说,最好将这种难读的宏定义转成 ...

  9. socket 通信 入门3 android 客户端 C# 服务端

    这是一个android端操控服务器的例子  就是发送简单指令到服务器  然后服务器响应什么的... 当然这里是未完成的  只是简单展示一下大致思路 首先连接建立起来后  服务端给客户端一条信息  告诉 ...

  10. 如何给变量取个简短且无歧义的名字(转) good

    湾区日报上分享的一篇文章,文章的作者在Google设计Dart语言,就变量命名方面给了4点建议,文中也列出了好变量名.坏变量名的对比.不管作者的看法与你实际中的命名习惯是否一致,看完这篇文章,相信可以 ...