02-进程通信

发布时间 2023-12-08 17:48:55作者: yaowy

进程通信有两种方式,分别是队列和管道

队列通信

import time
from multiprocessing import Process, Queue


def func(q):
    time.sleep(1)
    q.put([1, 'yaowy', 28])


if __name__ == '__main__':
    q = Queue()
    p = Process(target=func, args=(q,))
    p.start()

    print(q.get())
    print(q.get())


Queue.get() 会阻塞。

管道通信

import time
from multiprocessing import Process, Pipe


def func(pipe):
    time.sleep(1)
    pipe.send([1, 'yaowy', 28])


if __name__ == '__main__':
    pipel, piper = Pipe()
    p = Process(target=func, args=(pipel,))
    p.start()

    print(piper.recv())
    print(piper.recv())

Pipe.recv 也会形成阻塞效果。Pipe 是双向的,会返回两个对象,表示管道的两端,recv 方法和 send 方法是相互的。

进程同步