2

我用 Python 编写了一个大型程序,它main一个接一个地调用许多自定义模块的方法。父脚本创建了一些公共资源,例如日志实例、数据库游标和文件引用,然后我将它们传递给各个模块。问题是我现在需要通过 调用其中一些模块subprocess.check_output,我不知道如何在这些模块之间共享上述资源。这可能吗?

4

1 回答 1

1

正如你所问的那样,这个问题没有一般的答案。可能有自定义方式;例如,在 Linux 上,很多东西实际上是文件描述符,并且有一些方法可以将它们传递给子进程,但它不是 Pythonic:你必须在子进程的命令行上将它们作为数字给出,然后子进程重建一个文件文件描述符周围的对象(对于常规文件,请参见file.fileno()os.fdopen();我不确定在 Python 中除了常规文件之外还有其他方法可以做到这一点......)。

在您的问题中,如果一切都在 Python 中,为什么您需要创建子进程而不是在单个进程中完成所有操作?

如果您确实需要,那么一种通用方法是使用os.fork()而不是subprocess模块:您将分叉该进程(创建它的两个副本);在父副本中,您等待子副本终止;并在子副本中继续运行特定的子模块。优点是最终子进程终止,这会清理它所做的事情——同时从它自己的几乎所有父进程(文件描述符、数据库游标等)的副本开始。

于 2013-09-29T07:30:04.767 回答