對於系統資源如檔案、資料庫連線、socket而言,應用程式開啟這些資源並執行完業務邏輯之後,必須做的一件事就是要關閉(斷開)該資源。
在python中開啟過多的檔案書寫完成後沒有及時關掉就會出現,too many open files" 的錯誤,因為系統允許你開啟的最大檔案數量是有限的。
例如:在建立tcp和udp是用到的套接字,在程式執行結束後應該及時關掉
下面是利用上下文管理器通過物件導向來書寫tcp,自動關閉套接字.
上下文管理器:任何實現了 __enter__() 和 __exit__() 方法的物件都可稱之為上下文管理器,上下文管理器物件可以使用 with 關鍵字。
# 客戶端
import socket
class client(object):
def __init__(self,ip,dk):
self.ip = ip
self.dk = dk
def __enter__(self):
self.tcp_socket = socket.socket(socket.af_inet,socket.sock_stream)
self.tcp_socket.connect((self.ip,self.dk))
send_mag = input('請輸入資訊:')
self.tcp_socket.send(send_mag.encode())
data = self.tcp_socket.recv(1024)
print(data.decode('gbk'))
def __exit__(self, *args):
self.tcp_socket.close()
if __name__ == '__main__':
with client('192.168.90.22', 8080) astcp_socket:
print("就好哈")
# 伺服器
import socket
class server(object):
def __init__(self):
self.tcp_socket = socket.socket(socket.af_inet,socket.sock_stream)
self.tcp_socket.bind(('',8888))
self.tcp_socket.listen(128)
def __enter__(self):
self.client_socket, address= self.tcp_socket.accept()
data = self.client_socket.recv(1024)
print(data.decode('gbk'))
mag = input('資訊:')
self.client_socket.send(mag.encode())
def __exit__(self, *args):
self.client_socket.close()
self.tcp_socket.close()
with server() as client_socket:
print('完成!!!....')
with上下文管理器
在執行 with 語句時,首先執行 with 後面的 open 執行完 後,會將 的結果通過 as 儲存到 f 中 然後在下面實現真正要執行的操作 在操作後面,並不需要寫檔案的關閉操作,檔案會在使用完後自動關閉 實際上,在檔案操作時,並不是不需要寫檔案的關閉,而是檔案的關閉操作在 with 的上下文...
with上下文管理器
上下文管理器 任何實現了enter 和exit 法的物件都可稱之為上下 管理 器,上下 管理器物件可以使 with 關鍵字。顯然,件 file 物件也實現 了上下 管理器 方法一class file def init self,filename,mode self.filename filename...
上下文管理器
今天我們聊聊上下文管理器,當然今天所談僅為個人觀點!今天如果不是學生面試回來跟我聊到了上下文管理器,我都忘了python中還有這麼個鬼了。特別寫一篇博文我們簡單聊聊。普通的檔案操作方式,例如 情況01 1 以寫的方式開啟檔案 f open 1.txt w 2 寫入檔案內容 f.write hello...