【问题标题】:Get process id of spawned process in Python Pebble library?在 Python Pebble 库中获取生成进程的进程 ID?
【发布时间】:2021-01-23 00:00:32
【问题描述】:

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

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

【问题讨论】:

    标签: python concurrency multiprocessing concurrent.futures


    【解决方案1】:

    ProcessPool 旨在从用户那里抽象出其内部运作。因此,它隐藏了对用于执行工作程序的进程的访问。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-20
      • 1970-01-01
      • 1970-01-01
      • 2020-01-20
      • 1970-01-01
      • 1970-01-01
      • 2013-08-18
      相关资源
      最近更新 更多