我知道这是论坛上的常见问题,但我找不到问题的答案。
我需要两个不同的脚本通过
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 文件中,但无法导入该对象。
有人可以指导我吗?
编辑:
multiprocessing
之外,还有哪些其他方法可能有帮助?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 中可能吗?
不。这也是其他任何事都不可能的。
除了多处理之外,还有哪些其他方法可能有帮助?
Wikipedia 列出了 IPC 的方法 https://en.wikipedia.org/wiki/Inter-process_communication 。选择一个并使用它。
也许 Pipe 不是工具,而 Listeners 才是?
不。正如 https://docs.python.org/3/library/multiprocessing.html 所说,多处理是“支持 spawning 进程的包”。您的进程是独立的,不是从一个进程衍生出来的,这个包与您的问题无关。