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

有帮助吗?

解决方案

子流程取代了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用于共享内存进程之间。

多处理提取 pipes 共享内存并提供更高级别的界面。取自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()

其他提示

查看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()

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

查看 子流程模块,可以在生成子进程时自动设置必要的管道。

您有两个选择: os 模块中的 os.popen * ,或者您可以使用 subprocess 模块获得相同的效果。 Python手册有很好的文档和示例,适用于 popen 子流程

如果您正在进行低级操作系统分叉并且确实希望避免使用管道,则也可以使用共享内存映射文件。这不如使用 subprocess popen 管道好,但包括完整性的答案......

完整示例这里,但基本上你可以结合 os 文件处理和 mmap 模块:

import mmap, os, tempfile
fd, tmpfile = tempfile.mkstemp()
os.write(fd, '\x00' * mmap.PAGESIZE)
os.lseek(fd, 0, os.SEEK_SET)
child_pid = os.fork()
if child_pid:
    buf = mmap.mmap(fd, mmap.PAGESIZE, mmap.MAP_SHARED, mmap.PROT_READ)
    os.waitpid(child_pid, 0)
    child_message = buf.readline()
    print(child_message)
    os.close(fd)
else:
    buf = mmap.mmap(fd, mmap.PAGESIZE, mmap.MAP_SHARED, mmap.PROT_WRITE)
    buf.write('testing\n')
    os.close(fd)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top