所谓数据传递,就是两个进程都可以访问这个数据,非修改。进程间数据传递有两种方式。
1.与线程一样,用Queue
2.管道
1.Queue
"""
进程
1.导入模块 是大写的Queue
2.定义子进程函数 传入Queue的变量值
2.1函数形参 ()传入Queue的变量值()
2.2 添加数据 qq.put()
3.创建进程
3.1 创建进程(一个函数,一个queue值)
3.2 启动进程 p.start() 与线程一样
3.3 得到值 p.get()
此代码就是子进程里添加数据
父进程访问了这个数据
实现了进程间的数据交互
"""
from multiprocessing import Process, Queue
def f_process(qq):
qq.put([42, None, 'hello'])
#process_main 主进程
#f_process 子进程
def process_main():
q_process = Queue() #创建一个进程的queue
p_process = Process(target=f_process, args=(q_process,)) #创建一个子进程p q_process 对应f_process的qq
p_process.start() #进程启动
data =q_process.get() # 得到queue数据
print(data) # 打印data数据 [42, None, 'hello']
p_process.join()
if __name__ == '__main__':
process_main()
2. 管道
"""
数据传递:
1.创建管道 parent_conn, child_conn = Pipe()
2.子发 f中 conn.send()
父收 f中 conn.recv()
3.两边次数要一样,不一样时会出现阻塞
数据共享:两个进程可以修改一份数据
"""
from multiprocessing import Process, Pipe
def f(conn):
conn.send([42, None, 'hello']) #子进程 可发送
redata=conn.recv() #子进程 可接收
conn.close()
if __name__ == '__main__':
parent_conn, child_conn = Pipe() #1.创建一个链路 父进程 子进程
p = Process(target=f, args=(child_conn,))
p.start()
print(parent_conn.recv()) # 父进程 可接收 prints "[42, None, 'hello']"
parent_conn.send("父进程发送数据") # 父进程 可发送
p.join()