当前位置:  开发笔记 > 编程语言 > 正文

如何在Python中的父级和分叉子进程之间共享数据?

如何解决《如何在Python中的父级和分叉子进程之间共享数据?》经验,为你挑选了3个好方法。

我很确定使用os.plock(op)函数可以做到这一点,但我不知道怎么做.此外,如果有更好的方法,我很高兴找到答案.代码片段非常受欢迎.



1> Florian Bösc..:

子进程替换os.popen,os.system,os.spawn,popen2和命令.管道的一个简单示例是:

p1 = Popen(["dmesg"], stdout=PIPE)
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
output = p2.communicate()[0]

您还可以使用带有标志= MAP_SHARED 的内存映射文件来处理进程之间的共享内存.

多处理抽象管道和共享内存,并提供更高级别的接口.取自Processing文档:

from multiprocessing import Process, Pipe

def f(conn):
    conn.send([42, None, 'hello'])
    conn.close()

if __name__ == '__main__':
    parent_conn, child_conn = Pipe()
    p = Process(target=f, args=(child_conn,))
    p.start()
    print parent_conn.recv()   # prints "[42, None, 'hello']"
    p.join()



2> Brian..:

看一下python 2.6中新增的多处理模块(也可用于早期版本的pyprocessing)

以下是使用管道传递信息的文档中的示例:

from multiprocessing import Process, Pipe

def f(conn):
    conn.send([42, None, 'hello'])
    conn.close()

if __name__ == '__main__':
    parent_conn, child_conn = Pipe()
    p = Process(target=f, args=(child_conn,))
    p.start()
    print parent_conn.recv()   # prints "[42, None, 'hello']"
    p.join()



3> Dan Lenski..:

这几乎与Python无关!这是Unix进程间通信的经典示例。一个不错的选择是用来popen()打开父进程和子进程之间的管道,并沿管道来回传递数据/消息。

看一下subprocess模块,它可以在生成子进程时自动设置必要的管道。

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有