python(30)-进程间的数据传递

所谓数据传递,就是两个进程都可以访问这个数据,非修改。进程间数据传递有两种方式。
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()


 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值