欢迎访问宙启技术站
智能推送

使用send()函数在python中实现进程之间的消息传递

发布时间:2023-12-16 09:56:07

在Python中,可以使用send()函数来实现进程之间的消息传递。send()函数用于向另一个进程发送消息,并可以接收另一个进程发送的消息。下面是一个简单的例子:

import time
from multiprocessing import Process, Pipe

def child(conn):
    while True:
        # 接收消息
        msg = conn.recv()
        if msg == 'exit':
            break
        print("Child received:", msg)
        time.sleep(1)
        # 发送消息
        conn.send("Hello from child!")

def parent(conn):
    for i in range(3):
        time.sleep(1)
        # 发送消息
        conn.send("Hello from parent!")
        # 接收消息
        msg = conn.recv()
        print("Parent received:", msg)
    # 发送终止信号
    conn.send("exit")

if __name__ == '__main__':
    # 创建管道
    parent_conn, child_conn = Pipe()
    # 创建子进程
    p = Process(target=child, args=(child_conn,))
    # 启动子进程
    p.start()
    # 启动父进程
    parent(parent_conn)
    # 等待子进程结束
    p.join()

在上面的例子中,首先创建了两个Pipe对象,用于在父进程和子进程之间传递消息。然后使用Process类创建了一个子进程,并指定了子进程的入口函数为child。父进程中使用parent函数进行消息发送和接收。在子进程中,在一个无限循环中不断接收父进程发送的消息,如果收到的消息是"exit",则退出循环;否则,打印收到的消息并发送回复消息。在父进程中,循环发送3条消息,并在每条消息发送后接收子进程的回复消息,并打印出来。最后,父进程发送一个终止信号,子进程在接收到终止信号后退出循环,结束子进程。

通过send()函数和recv()函数,可以在父进程和子进程之间进行双向的消息传递,并实现进程之间的交流和同步。实际上,Pipe对象可以理解为一个双向的管道,send()函数用于在管道中发送消息,recv()函数用于在管道中接收消息。

需要注意的是,在使用send()函数发送消息时,消息的数据类型必须是可序列化的,即可以通过pickle模块进行序列化和反序列化。因此,发送的消息可以是字符串、数字、列表、字典等序列化的对象。