python中无块级做用域,是以函数为做用域python
#python中无块级做用域 if 1==1: name = 'alex' print(name) for i in range(10): name =i print(name) #python 中以函数为做用域 def func(): name = 'alex' func() print(name)
python的做用域在执行以前已经肯定。服务器
#python的做用域在执行以前已经肯定 name = 'alex' def f1(): print(name) def f2(): name = 'eric' f1() f2()
做用链多线程
li = [lambda :x for x in range(10)] r = li [0]() print(r)
li为列表并发
li列表中的元素:【函数,函数,函数 ...】app
函数在没有执行前 ,内部代码不执行.框架
IO多路复用异步
概述
select , poll , epollsocket
监听 socket 对象内部是否变化了?连接或者收发消息会发生变化函数
socket实现伪并发线程
socket服务器端
import socket import select sk = socket.socket() sk.bind(('127.0.0.1',999,)) sk.listen(5) inputs = [sk,] while True: rlist,w,e = select.select([sk,],[],[],1) #print(rlist) print(len(inputs),len(rlist)) #监听sk(服务器端)对象,若是sk对象发生变化,表示 有客户端来链接了,此时rlist值为 【sk】 # 监听conn对象,若是conn发生变化,表示客户端有新消息发送过来了,此时rlist的之为 【客户端】 for r in rlist: if r == sk: #新客户来链接 conn,address = r.accept() #conn是什么?其实socket对象 inputs.append(conn) conn.sendall(bytes('hello',encoding='utf-8')) else: print('======>') try: ret = r.recv(1024) if not ret: raise Exception('断开链接') except Exception as e: inputs.remove(r)
socket读写分离
服务器端
import socket import select sk = socket.socket() sk.bind(('127.0.0.1',999,)) sk.listen(5) inputs = [sk,] outputs = [] while True: rlist,wlist,e = select.select(inputs,outputs,[],1) #print(rlist) print(len(inputs),len(rlist),len(wlist),len(outputs)) #监听sk(服务器端)对象,若是sk对象发生变化,表示 有客户端来链接了,此时rlist值为 【sk】 # 监听conn对象,若是conn发生变化,表示客户端有新消息发送过来了,此时rlist的之为 【客户端】 for r in rlist: if r == sk: #新客户来链接 conn,address = r.accept() #conn是什么?其实socket对象 inputs.append(conn) conn.sendall(bytes('hello',encoding='utf-8')) else: #r.recv(1024) print('======>') try: ret = r.recv(1024) if not ret: raise Exception('断开链接') else: outputs.append(r) except Exception as e: inputs.remove(r) for w in wlist: w.sendall(bytes('response',encoding='utf-8')) outputs.remove(w)
socket客户端
import socket sk = socket.socket() sk.connect(("127.0.0.1",999,)) data = sk.recv(1024) print(data) while True: inp = input('>>>>') sk.sendall(bytes(inp,encoding='utf-8')) sk.close()
UnixDatagramServer
from SocketServer import TCPServer, StreamRequestHandler class Handler(StreamRequestHandler): def handle(self): addr = self.request.getpeername() self.wfile.write('Thank you for connectiong') server = TCPServer(('',8088),Handler) server.serve_forever()
概述:
def f1(arg): print(arg) import threading t = threading.Thread(target =f1,args=(123,)) t.setDaemon(True)#true,表示主线程不等子线程 t.start() #不表明当前线程会被当即执行 t.join(2) # 表示主线程到此,等待..直到子线程执行完毕 #参数,表示主线程在此最多等待n秒 f1(1111)