2024-05-05 09:52:22 发布
网友
实际上,我正在编写一个Python脚本,其中有一个字典列表,然后我使用一个子进程运行另一个Python脚本
在第二个脚本中,我需要访问与第一个脚本中相同的词典列表,因此到目前为止,我一直在执行以下操作:
然而,dump和load是非常慢的I/O操作,特别是对于大文件,因此我想知道是否有其他方法可以直接在内存中与第二个脚本共享这样的字典列表
据我所知,在使用subprocess模块时不能这样做,但是使用多进程重写和重构(如果可行的话)将允许您使用https://docs.python.org/3.7/library/multiprocessing.html#sharing-state-between-processes处的选项
但是,请注意,由于锁定开销等原因,这很可能会影响性能,因此可能比复制数据慢。如果您想优化复制,可以考虑使用pickle而不是json进行序列化
可以使用管道在不同的程序/进程之间设置通信链接。这将允许您在它们之间传递消息,而无需写入光盘
而且,为了使事情更美好,在主进程和它的子进程之间已经存在一对管道,即stdin和stdout。因此,在启动子进程时,请确保将stdin重新路由到管道,这样就可以直接写入子进程:subprocess.call([subprogram], stdin=subprocess.PIPE ...)
stdin
stdout
subprocess.call([subprogram], stdin=subprocess.PIPE ...)
当然,子进程/程序必须能够通过该链接处理输入,而不是从光盘读取。我认为这是实现你想要的最干净和最简单的方法,只要这是Jython的作品,我从未尝试过
据我所知,在使用subprocess模块时不能这样做,但是使用多进程重写和重构(如果可行的话)将允许您使用https://docs.python.org/3.7/library/multiprocessing.html#sharing-state-between-processes处的选项
但是,请注意,由于锁定开销等原因,这很可能会影响性能,因此可能比复制数据慢。如果您想优化复制,可以考虑使用pickle而不是json进行序列化
可以使用管道在不同的程序/进程之间设置通信链接。这将允许您在它们之间传递消息,而无需写入光盘
而且,为了使事情更美好,在主进程和它的子进程之间已经存在一对管道,即
stdin
和stdout
。因此,在启动子进程时,请确保将stdin
重新路由到管道,这样就可以直接写入子进程:subprocess.call([subprogram], stdin=subprocess.PIPE ...)
当然,子进程/程序必须能够通过该链接处理输入,而不是从光盘读取。我认为这是实现你想要的最干净和最简单的方法,只要这是Jython的作品,我从未尝试过
相关问题 更多 >
编程相关推荐