使用 multiprocessing.Pipe 进行进程间通信

问题描述 投票:0回答:1

我知道这是论坛上的常见问题,但我找不到问题的答案。

我需要两个不同的脚本通过

multiprocessing.Pipe
进行通信。

我有

code1.py
:

import time
#...

def code_one(pipe):
    for _ in range(100):
        pipe.send("data")
        time.sleep(1)

if __name__ == '__main__':
    code_one(parent_pipe)

code2.py

import time
#...

def code_two(pipe):
    while True:
        if pipe.poll():
        data = pipe.recv()
        print(data)

if __name__ == '__main__':
    code_two(child_pipe)

我的问题如下:

然后我需要分享

parent_pipe, child_pipe = Pipe()
但我无法管理如何使用。我尝试将其放入第三个 .py 文件中,但无法导入该对象。

有人可以指导我吗?

编辑:

  1. Python 中可能吗?
  2. 除了
    multiprocessing
    之外,还有哪些其他方法可能有帮助?
  3. 也许
    Pipe
    不是工具,但
    Listener
    才是?

编辑2: 应该有一个

main.py
来启动进程,如下所示:

import multiprocessing

import code1
import code2

parent_pipe, child_pipe= multiprocessing.Pipe()

if __name__ == '__main__':
    p1 = multiprocessing.Process(target=code1.code_one, args=(child_pipe,))
    p2 = multiprocessing.Process(target=code2.code_two, args=(parent_pipe,))

    p1.start()
    p2.start()

我不知道这是否能解决我的问题。我想在后台使用共享资源运行具有两个不同参数的程序:

nohup python3 my_package.py --send &
nohup python3 my_package.py --recieve &
python multiprocessing pipe ipc
1个回答
0
投票

有人可以指导我吗?

使用管道来通信不相关的进程是不可能的。

Python 中可能吗?

不。这也是其他任何事都不可能的。

除了多处理之外,还有哪些其他方法可能有帮助?

Wikipedia 列出了 IPC 的方法 https://en.wikipedia.org/wiki/Inter-process_communication 。选择一个并使用它。

也许 Pipe 不是工具,而 Listeners 才是?

不。正如 https://docs.python.org/3/library/multiprocessing.html 所说,多处理是“支持 spawning 进程的包”。您的进程是独立的,不是从一个进程衍生出来的,这个包与您的问题无关。

© www.soinside.com 2019 - 2024. All rights reserved.