1. 进程管道 Pipe
进程管道是用于进程之间通信的一种机制,一般用于父进程与子进程之间的通信。管道通常是一种单向的通信方式,即数据在父进程中写入管道并在子进程中读取。
在Python中,可以使用pipe()
方法创建一个进程管道。
1.1 创建进程管道
import os
# 创建管道
r, w = os.pipe()
上述代码中,r
表示管道的读取端,w
表示管道的写入端。
1.2 使用进程管道进行通信
import os
r, w = os.pipe()
pid = os.fork()
if pid > 0:
# 父进程写入数据到管道
os.close(r)
w = os.fdopen(w, 'w')
w.write("Hello child process")
w.close()
else:
# 子进程从管道中读取数据
os.close(w)
r = os.fdopen(r)
text = r.read()
r.close()
print(text)
上述代码中,父进程从w
写入数据到管道中,子进程从r
中读取数据。运行代码后,子进程将从管道中读取到父进程写入的数据并打印出来。
2. 进程 Manager
进程 Manager是用于进程之间共享数据的一种机制,可以在多个进程中共享数据。
2.1 创建进程 Manager
from multiprocessing import Process, Manager
def worker(d):
d['count'] += 1
if __name__ == '__main__':
# 创建Manager对象
manager = Manager()
# 创建共享字典
d = manager.dict()
# 设置初始值
d['count'] = 0
# 创建子进程
p = Process(target=worker, args=(d,))
p.start()
p.join()
# 打印结果
print(d['count'])
上述代码中,Manager()
用于创建一个Manager对象,通过Manager对象可以创建共享的数据结构,如共享字典d
。在子进程中,可以通过修改d
来实现对共享数据的操作。
2.2 使用进程 Manager 进行数据共享
from multiprocessing import Process, Manager
def worker(l):
l.append('world')
if __name__ == '__main__':
# 创建Manager对象
manager = Manager()
# 创建共享列表
l = manager.list(['hello'])
# 创建子进程
p = Process(target=worker, args=(l,))
p.start()
p.join()
# 打印结果
print(l)
上述代码中,子进程将字符串'world'
添加到共享列表l
中,并通过print(l)
输出共享列表的内容。
通过使用进程管道和进程Manager,可以实现进程之间的通信和数据共享,在多进程编程中有着重要的作用。