我有一个可用的Python(2.7)脚本,它通过pexpect模块以交互方式与gdb
进行通信。然而,它的速度非常慢,我需要使用多处理池来加快速度。我找到了一种方法,但在我的实现中,多个进程中的每一个都必须生成自己的pexpect实例。这似乎是对计算时间的巨大浪费,因为产生每个pexpect实例需要几分钟,而且我必须产生数百个。
而不是代表当前程序的这种流程图,
Process A --- pexpect A
\
\
Process B --- pexpect B --- Main Script
/
/
Process C --- pexpect C
我想有这样的事情:
Process A
\
\
Process B --- global pexpect process -- Main Script
/
/
Process C
我知道在StackOverflow上共享多个进程之间的对象不是新的,但是所讨论的那些对象本质上是只读的。我认为我的问题不同之处在于,这个pexpect实例可能会耗尽虚拟内存,并且偶尔需要重新启动。
这意味着共享的pexpect对象需要在多个进程中的每一个进程中可写,并且需要告知多个进程中的每个进程等待pexpect进程完成重启。此外,多个进程中的每一个都需要能够在重启完成后用重新启动的版本更新其pexpect实例的副本。
坦率地说,我不知道这是否可行。我知道在幕后,Python使用os.fork()
来实现多处理,所以我认为任意多写者/多读者共享内存资源甚至不能建成。尽管如此,我还是试图使用`multiprocessing.Manager()'来尝试传递共享的pexpect对象,但是当我尝试通过管理器实现通信时,我得到了一个错误,即pexpect对象不是咸菜,能。
我只是认为这基本上是不可能的,或者这实际上可以做到吗?