我用 Python 编写了一个大型程序,它依次调用许多自定义模块的 main 方法。父脚本创建一些公共(public)资源,例如日志记录实例、数据库游标和文件引用,然后我将它们传递给各个模块。问题是我现在需要通过 subprocess.check_output 调用其中一些模块,我不知道如何在这些模块之间共享上述资源。这可能吗?
请您参考如下方法:
您提出的问题完全没有一般答案。可能有自定义方式;例如在 Linux 上,很多东西实际上是文件描述符,并且有一些方法可以将它们传递给子进程,但这不是很好的 Pythonic:你必须在子进程的命令行上将它们作为数字给出,然后子进程重建一个文件对象围绕文件描述符(请参阅 file.fileno() 和 os.fdopen() 获取常规文件;我不确定是否有其他方法可以在 Python 中执行此操作比普通文件...)。
在您的问题中,如果所有内容都在 Python 中,为什么您需要创建子流程而不是在单个流程中完成所有工作?
如果你真的需要,那么一种通用的方法是使用 os.fork() 而不是 subprocess 模块:你可以 fork 进程(它创建两份);在父副本中,您等待子副本终止;在子副本中,您继续运行特定的子模块。优点是子进程最后终止,清理它所做的事情——同时从父进程拥有的几乎所有内容(文件描述符、数据库游标等)的自己的副本开始
