0

我正在制作一个小管道来处理大量数据,我决定使用 python 来调用使用多个内核的程序。

所以这是我的问题:

1)程序输出一个非常大的文本文件。我只想将输出保存到一个新文件(所以不要将字符串保存为 python 对象),使用 subprocess 模块执行此操作的最佳方法是什么?

2)我希望使用多进程模块多次并行调用程序。我通常只是简单地使用 Pool.map 函数,这会干扰子进程模块吗?

提前致谢!

4

1 回答 1

4

1)程序输出一个非常大的文本文件。我只想将输出保存到一个新文件(所以不要将字符串保存为 python 对象),使用 subprocess 模块执行此操作的最佳方法是什么?

如果您查看文档,则有效值为stdout

PIPE、现有文件描述符(正整数)、现有文件对象和无。

所以:

with open('new_file.txt', 'w') as outfile:
    subprocess.call(['program', 'arg'], stdout=outfile)

2)我希望使用多进程模块多次并行调用程序。我通常只是简单地使用 Pool.map 函数,这会干扰子进程模块吗?

除非你做了一些奇怪的事情。

multiprocessing.Pool跟踪它创建的进程,并且不会尝试管理碰巧在其他地方创建的其他子进程,因此您担心的显而易见的事情不是问题。

我见过的最常见的问题是使用Popen创建您永远不会收获的子进程。您通常会在没有 的应用程序中侥幸逃脱multiprocessing,但一旦您Popen在池任务中执行 -and-leak 操作,您就不再侥幸逃脱了。(这实际上与multiprocessingPython 无关;只是孙进程与子进程不同。)

于 2013-09-25T18:31:13.277 回答