python整理-day10

1上节回顾

Socket

1、导入模块

2、创建socket

327发送的是字符串,但是3.5里面全部都是字节

Send:我发送了多少(10字节=send('sadaqweqweqweqweqwe'),不一定全部发送完毕

Sendall,其实就是调用send,但是做了一个while循环,一直调用send,把所有的消息全部发送完毕

4、recv(2048) 上传文件,最多接收2048个字节

粘包:ack

 

Subprocess

win:gbk编码的字节

linux:utf-8编码的字节

 

小知识

作用域

Python 中无块级作用域

java和c#里面下面代码无法执行

python和javascript可以执行

有块级作用域只能在块里面用,无块级可以在块外面用

python以函数为作用域的

 

if 1==1:
    name="wzc"

print(name)


def func():
    name1="wzc"

func()
print(name1)

 结果

wzc
Traceback (most recent call last):
  File "/Users/wangzhichao/PycharmProjects/python_study/day10/1-1.py", line 11, in <module>
    print(name1)
NameError: name 'name1' is not defined

Process finished with exit code 1

 

python作用域链,由内向外找,直到找不到报错

对于作用域来说,在函数没有执行之前,作用域已经全部都确定了,作用域链已经全部都确定了

由内向外一层一层

 

name="www"

def f1():
    print(name)

def f2():
    name="wzc"
    return f1
ret=f2()
ret()

 结果:

www

Process finished with exit code 0

 

 

Python27多继承,py3.5多继承

2.7不继承object类,但是python3自动继承object类

2.7

默认不继承的是经典类

继承的是新式类

3.5

全是新式类

Socket server 源码

支持并发处理socket

IO多路复用

概述

select、poll、epoll

select对个数有限制,1024个函数,内部通过for循环来实现,可以跨平台

poll,没有个数显示,但是还是for循环,无法跨平台

epoll是里面哪一个有变化,就会通知epoll。回调

 

监听socket对象内部是否变化了?

什么时候变化?连接或收发消息的时候

服务器端的socket对象发生变化==》就是有新连接来了

sk:有新连接来了

conn:要收发消息了

 

 

多线程、多进程、协称

alex甄嬛西游传

 

1、一个应用程序,可以有多进程多线程

2、默认是单进程单线程

3、单进程,多线程

IO操作,不占用CPU

多线程提高并发

IO操作

计算性操作

多进程提高并发

需要占用cpu,无法多线程,就需要利用多进程

4、GIL 全局解释器锁 java和C#没有这个锁

 

如何创建线程

和线程相关的模块都在threading

需要靠cpu自己的调度,来确认执行的时间

 

Python2.7 里面,每个线程默认执行100条cpu指令

Python3里面,这个线程执行多长时间,用时间来分片

import time
def f1(arg):
    time.sleep(3)
    print(arg)


import threading
t=threading.Thread(target=f1,args=(123,))
t.setDaemon(True)
t.start()
t.join(2)


print("end")
print("end")
print("end")
print("end")
print("end")
print("end")
print("end")

 结果:

end
end
end
end
end
end
end

Process finished with exit code 0

 

 

  

posted @ 2016-07-11 01:01  wzc1206  阅读(113)  评论(0编辑  收藏  举报