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



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

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

在你的问题中,如果一切都在Python中,为什么你需要制作子进程而不是在一个进程中完成所有工作?

如果你真的需要,那么一种通用的方法是使用 os.fork() 而不是 subprocess 模块:你将分叉进程(创建它的两个副本(;在父副本中,你等待子副本终止;在子副本中,你继续运行特定的子模块。 优点是子进程结束时终止,这会清理它---执行的操作,同时从父进程拥有的几乎所有内容(文件描述符、数据库游标等(的自己的副本开始。

最新更新