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)