Python中的無名套接字是一種在進程間通信中非常有用的機制。它允許不同的進程之間在同一臺機器上進行通信,而不需要使用網絡協議棧。無名套接字這個術語即指套接字對象,又指其對應的套接字文件描述符,它可以利用普通的系統調用進行讀寫操作。
import os import socket # 創建無名套接字 sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) # 綁定地址 sock.bind('/tmp/my_socket') # 監聽客戶端連接 sock.listen() # 接受客戶端連接 client_socket, addr = sock.accept() # 接受數據 data = client_socket.recv(1024) # 發送數據 client_socket.send('Hello, World!'.encode()) # 關閉套接字 client_socket.close() sock.close() # 刪除套接字文件 os.unlink('/tmp/my_socket')
無名套接字可以接受文件描述符,這種機制可以讓孫進程訪問父進程創建好的虛擬文件系統。這樣可以避免了慢速的IPC通信,提高了進程間通信的速度。在使用無名套接字時要特別注意,它只能進行同一臺機器上的進程間通信,而不能實現跨機器通信。