这里主要是两个进程中共享数据,本质是共享内存。采用I/O流的方式来访问。
有两种管道:
①匿名管道:父子进程间通信;
②命名管道:两个进程间通信。
Python代码如下:
server.py
- # -*- coding: utf-8 -*-
-  
- import win32file
- import win32pipe
-  
- PIPE_NAME = r"\\.\pipe\test_pip"
- PIPE_BUFFER_SIZE = 65535
-  
- # PIPE_ACCESS_DUPLEX 双向通信
- namedPipe = win32pipe.CreateNamedPipe(PIPE_NAME,
-                                       win32pipe.PIPE_ACCESS_DUPLEX,
-                                       win32pipe.PIPE_TYPE_MESSAGE | win32pipe.PIPE_WAIT | win32pipe.PIPE_READMODE_MESSAGE,
-                                       win32pipe.PIPE_UNLIMITED_INSTANCES,
-                                       PIPE_BUFFER_SIZE,
-                                       PIPE_BUFFER_SIZE, 500, None)
-  
- if __name__ == '__main__':
-  
-     while True:
-         try:
-             win32pipe.ConnectNamedPipe(namedPipe, None)
-             data = win32file.ReadFile(namedPipe, PIPE_BUFFER_SIZE, None)
-             if data is None or len(data) < 2:
-                 continue
-  
-             print("receive msg : ", str(data))
-             pass
-         except Exception as e:
-             print(e)
-             pass
-  
-     try:
-         win32pipe.DisconnectNamedPipe(namedPipe)
-         pass
-     except Exception as e:
-         print(e)
-         pass
-     pass
client.py
- # -*- coding: utf-8 -*-
-  
- import win32pipe
- import win32file
- import time
-  
- PIPE_NAME = r"\\.\pipe\test_pip"
-  
- fileHandle = win32file.CreateFile(PIPE_NAME,
-                                   win32file.GENERIC_READ | win32file.GENERIC_WRITE,
-                                   win32file.FILE_SHARE_WRITE, None,
-                                   win32file.OPEN_EXISTING, 0, None)
-  
- if __name__ == '__main__':
-     try:
-         for i in range(1, 100):
-             msg = str(i)
-             print("send msg: " + msg)
-             win32file.WriteFile(fileHandle, msg.encode())
-             time.sleep(1)
-             pass
-         pass
-     except Exception as e:
-         print(e)
-         pass
-     finally:
-         try:
-             win32file.CloseHandle(fileHandle)
-             pass
-         except Exception as e:
-             print(e)
-             pass
-         pass
-     pass
程序运行截图如下:
客户端:

服务端:

需要注意的地方:
- # PIPE_ACCESS_DUPLEX  该管道是双向的,服务器和客户端进程都可以从管道读取或者向管道写入数据。
- # PIPE_ACCESS_INBOUND 该管道中数据是从客户端流向服务端,即客户端只能写,服务端只能读。
- # PIPE_ACCESS_OUTBOUND 该管道中数据是从服务端流向客户端,即客户端只能读,服务端只能写。
-  
- # PIPE_TYPE_BYTE   数据作为一个连续的字节数据流写入管道。
- # PIPE_TYPE_MESSAGE 数据用数据块(名为“消息”或“报文”)的形式写入管道。
- # PIPE_READMODE_BYTE 数据以单独字节的形式从管道中读出。
- # PIPE_READMODE_MESSAGE 数据以名为“消息”的数据块形式从管道中读出(要求指定PIPE_TYPE_MESSAGE)。
- # PIPE_WAIT 同步操作在等待的时候挂起线程。
- # PIPE_NOWAIT 同步操作立即返回。

 
                


















