进程通信有两种方式,分别是队列和管道
队列通信
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 方法是相互的。