在 Python Pebble 库中获取衍生进程的进程 ID?

Get process id of spawned process in Python Pebble library?

我正在使用 Pebble 库中的 ProcessPool 来启动一个容易崩溃的子进程。我想记录崩溃但来自主进程而不是子进程的子进程的进程 ID(原因是我在主进程中有一个日志行,其中包含与一个请求相关的一堆相关信息我想包括这个而不是分散在多个日志行中)。有什么方法可以访问这个进程 ID 吗?我似乎无法在文档中找到此信息。

我想作为一种解决方法,我可以在使用 os.getpid() 进行任何操作之前获取子进程中的 pid,并使用 IPC 将其传回父进程。但我想尽可能避免这种情况。

ProcessPool 旨在从用户中抽象出其内部工作原理。因此,它隐藏了对用于执行工人的进程的访问。

如果您仅出于调试目的需要此信息,我的建议是使用唯一标识符标记您的作业,然后从工作进程中记录这些标识符和工作进程 PID。通过这种方式,您可以关联导致函数崩溃的作业。

def function(jobid, *args):
    logging.debug("Job ID %d started on worker %d", jobid, os.getpid())
    
    ...

pool.schedule(function, (jobid, arg1, arg2))