zoukankan      html  css  js  c++  java
  • python2和3的区别丶网络编程以及socketserver多线程

    一丶python2和python3的区别

      1.编码&字符串

        字符串:

          python2:

            Unicode    v = u"root"  本质上用unicode存储(万国码)

            (str/bytes)   v = "root" 本质用字节存储

          python3:

            str    v = "root"    本质上用unicode存储(万国码)

            bytes     v = b"root"    本质上用字节存储

        编码:

          python2:   ascii  文件头可以修改#-*-  encoding:utf-8 -*-

          python3:    utf-8  文件头可以修改#-*-  encoding:utf-8 -*-

      2.继承

        python2:   经典类/新式类

        python3:    新式类

      3.范围

        python2:     range/xrange

        python3:      range

      4.输入

        python2:  v1 = raw_input("请输入用户名")

        python3:  v2 = input("请输入用户名")

      5.打印

        python2:  print"XXX"

        python3:  print("XXX")

    二丶网络编程

      1.mac

        mac地址是固定的存在于网卡上.每台电脑都不一样

      2.DHCP

        DHCP是一个局域网的网络协议,存在于路由器或交换机中,该协议可以自动的为我们分配IP

        有局域网,广域网,城域网

        ARP协议:ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。

      3.DNS

        网络连接:

          域名解析:

            每一个域名后面都有其对应的IP地址,如:

              www.baidu.com  111.13.100.91

              www.qq.com    111.30.132.101

            连接时:

              sk = socket.socket()

              sk.connect(("111.13.100.91",8080))....

        问题来了,域名和IP的对应关系在哪里?

          本地:

            Win本地电脑:

              C:WindowsSystem32driversetchosts中

            Linux/Mac电脑:

              /etc/hosts中

        DNS服务器: 全球顶级的DNS服务器只有十三台

    三丶socketserver和多线程

      socketserver

        对照图看源码:

        执行serve_forever的相关代码:

       2.多线程

        在多线程的操作系统中,通常是在一个进程中包括多个线程,每个线程都是作为利用CPU的基本单位,是花费最小开销的实体。

    import time
    import threading
    
    def task(a1,a2,a3):
        time.sleep(3)
        print('拿快递')
    
    def play():
        print('和女朋友去耍')
    
    def wm():
        print('去拿外卖')
    
    # 创建一个线程
    # 让该线程去执行任务:函数
    t1 = threading.Thread(target=task,args=(1,2,3,))
    # 去执行吧
    t1.start()
    
    
    # 创建一个线程
    # 让该线程去执行任务:函数
    t2 = threading.Thread(target=play)
    # 去执行吧
    t2.start()
    
    # 创建一个线程
    # 让该线程去执行任务:函数
    t3 = threading.Thread(target=wm)
    # 去执行吧
    t3.start()
    
    print('玩扇子')
    print('煽风点火')
    print('耍贱...')

      线程好比一个人同时做多件事,就跟孙悟空一样,来一个需求,就把根毛变成自己去做那件事了,再来一个需求就再拔一根变成自己去做,之间互不干扰.有了多线程我们服务器就可以为多个用户同时服务了

    示例:我么可以模拟很多人给服务器请求,让服务器去执行,每个请求10秒后完成.代码如下

    import time
    import threading
    
    
    def task(n):
        print('开始执行任务:',n)
        time.sleep(10)
        print('...')
        print('任务%s 执行完毕:'%n)
    
    while True:
        name = input("请输入任务:")
        t = threading.Thread(target=task,args=(name,))
        t.start()

    多个任务同时进行,并且互不干扰

  • 相关阅读:
    C语言中返回字符串函数的四种实现方法
    (转)大整数除法jva.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result异常的解决方法
    @Transactional使用try->catch捕获异常并回滚方法
    Golang1.13.x 解决go get 无法下载问题
    Zookeeper:Unable to read additional data from client sessionid 0x00, likely client has closed socket
    解决Linux系统下面javamelody图片中文乱码问题
    mybatis查询mysql的datetime类型数据时间差了14小时
    以太坊多重钱包离线签名
    Solidity智能合约如何判断地址为0或空
    Solidity开发注意
  • 原文地址:https://www.cnblogs.com/qicun/p/9599581.html
Copyright © 2011-2022 走看看