如何在Python中使用multiprocessing.connection实现进程间长连接
发布时间:2024-01-06 20:05:46
在Python中,我们可以使用multiprocessing.connection模块来实现进程间的长连接。
multiprocessing.connection模块提供了一个Listener类,用于创建一个监听器对象,用来等待其他进程的连接请求。一旦有连接请求到达,该监听器对象就会创建一个Connection对象,该对象可以用来发送和接收数据。
下面是一个使用multiprocessing.connection模块实现长连接的例子:
# 进程A
from multiprocessing import Process, Lock
from multiprocessing.connection import Listener, Client
def processA(conn):
for i in range(5):
conn.send(f"Message {i} from Process A")
print(conn.recv())
conn.close()
if __name__ == '__main__':
# 创建监听器
listener = Listener(('localhost', 6000))
# 等待连接请求
print("Waiting for connection...")
conn = listener.accept()
print("Connection accepted from:", listener.last_accepted)
# 启动进程A
p = Process(target=processA, args=(conn,))
p.start()
# 进程B
from multiprocessing import Process, Lock
from multiprocessing.connection import Listener, Client
def processB(conn):
for i in range(5):
print(conn.recv())
conn.send(f"Message {i} from Process B")
conn.close()
if __name__ == '__main__':
# 创建连接
conn = Client(('localhost', 6000))
# 启动进程B
p = Process(target=processB, args=(conn,))
p.start()
# 等待进程B结束
p.join()
在这个例子中,进程A通过创建一个Listener对象,在指定的IP和端口上监听连接请求。一旦有连接请求到达,就会创建一个Connection对象,并传递给进程A的函数processA。进程A通过这个Connection对象可以发送和接收数据。
进程B通过创建一个Client对象,在指定的IP和端口上连接到进程A监听的地址。连接成功后,进程B可以通过这个Connection对象发送和接收数据。
在例子中,进程A发送了5条消息给进程B,进程B接收到每条消息后回复一条消息。
使用multiprocessing.connection实现进程间长连接可以方便地进行进程间的通信,并可灵活地实现任务分配、结果汇总等功能。
