使用多进程作为本地IPC

5
我正在考虑使用Python的多进程包在本地Python程序之间进行消息传递。
如果满足以下条件,这似乎是正确的选择:
  • 程序始终在同一台机器上运行(并且在相同的操作系统实例中)
  • 程序的实现将保持在Python中
  • 速度很重要
如果Python进程是由用户独立运行的,是否可能?
如何实现? 文档似乎只给出了一个进程生成另一个进程的示例。

1
抢占式调度 - 如果答案是“那不是正确的方法”,这并不意味着问题不好。相反,它使其他探索者受益。 - Jonathan Livni
对于进程间通信,您将希望使用任何可用的IPC机制。多进程包提供了队列和管道,以便在进程之间交换对象。请参见您所包含的链接。 - pyfunc
@pyfunc - 我知道,我正在询问如何在一个进程没有生成另一个进程的情况下使用管道和队列。我知道0MQkombuActive MQbottleflaskxmlrpclib等等,但我认为如果可能的话,多进程可能是这种特定情况的好选择。 - Jonathan Livni
2个回答

2

1
程序将始终在同一台机器上本地运行(并且在相同的操作系统实例上)。
多进程允许具有远程并发性。
程序的实现将保持在Python中。
是和否。您可以在Python函数中包装另一个命令。例如,这将起作用:
from multiprocessing import Process
import subprocess

def f(name):
    subprocess.call(["ls", "-l"])

if __name__ == '__main__':
    p = Process(target=f, args=('bob',))
    p.start()
    p.join()

速度很重要

这取决于许多因素:

  • 进程之间的协调会产生多少开销?
  • CPU有多少个核心?
  • 每个进程需要多少磁盘I/O?它们是否在同一物理磁盘上工作?
  • ...

如果Python进程是由用户独立运行的,即一个进程没有生成另一个进程,是否可能实现?

我不是这方面的专家,但我曾经通过使用文件交换数据来实现类似的功能[基本上一个进程的输出文件被另一个进程监视为输入源,反之亦然]。

希望对你有所帮助!


感谢提到远程并发。我在阅读文档时错过了它。这让我提出了这个后续问题 - Jonathan Livni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接