【问题标题】:How to get currently running processes names from multiprocessing module in python如何从python中的多处理模块获取当前正在运行的进程名称
【发布时间】:2021-09-27 09:31:16
【问题描述】:

我知道在多线程中,我可以使用枚举方法来获取所有当前正在运行的线程的名称。但是对于多处理,非池类进程调用中的等价物是什么:

p1 = multiprocessing.Process(name='P1',
                    target=self.get_data,
                    args=(url,))

例如,如果我创建了上述进程,并在上面创建了一个带有“P2”的进程,那么所需的 sn-p 应该返回 P1 和 P2

【问题讨论】:

  • 您想知道您的代码派生的Process [s] 的身份吗?
  • @balderman,就像我在上面创建了进程 P1,现在如果我再创建一个进程 P2,我应该得到这些进程的名称。但如果这不可能,你可以建议一些 ID 或其他东西,这也会有帮助。
  • 是的 - p1.pid 将为您提供进程 ID。它是整个操作系统的唯一标识符
  • @balderman,我不需要 p1.pid。我需要所有正在运行的进程的 ID。类似 threading.enumerate 的东西,用于创建所有线程。

标签: python python-3.x multiprocessing python-multiprocessing


【解决方案1】:

您可以使用multiprocessing.active_children(),它返回multiprocessing.Process 对象的列表。

例如:

for p in multiprocessing.active_children():
    print(f"child {p.name} is PID {p.pid}")

如果您没有对Process() 使用name= 参数,则默认名称为Process-1Process-2 等。

请注意,这与threading.enumerate() 具有相同的限制,因为它仅识别已以.start() 启动但尚未终止的进程。

还要注意 Python 文档中的这一点:

调用它具有“加入”任何已经完成的进程的副作用

【讨论】:

  • 它可能 join 一个已经完成的进程,但对 join 多次来说没什么大不了的......这影响的唯一事情是对 active_children 的后续调用(加入的进程不再集合的一部分)
猜你喜欢
  • 2011-07-08
  • 1970-01-01
  • 2021-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-10
  • 2012-01-12
  • 1970-01-01
相关资源
最近更新 更多