Skip to main content
 首页 » 编程设计

python之可以跨 Python 子进程共享资源(日志记录、数据库、文件等)吗

2025年05月04日7dyllove98

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

请您参考如下方法:

您提出的问题完全没有一般答案。可能有自定义方式;例如在 Linux 上,很多东西实际上是文件描述符,并且有一些方法可以将它们传递给子进程,但这不是很好的 Pythonic:你必须在子进程的命令行上将它们作为数字给出,然后子进程重建一个文件对象围绕文件描述符(请参阅 file.fileno() 和 os.fdopen() 获取常规文件;我不确定是否有其他方法可以在 Python 中执行此操作比普通文件...)。

在您的问题中,如果所有内容都在 Python 中,为什么您需要创建子流程而不是在单个流程中完成所有工作?

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