【问题标题】:Python multiprocessing: name of the main processPython多处理:主进程的名称
【发布时间】:2015-06-11 20:20:14
【问题描述】:

我正在使用多处理模块在不同的进程上运行一段代码。 在代码中的某个时刻,我需要知道代码是由主进程执行还是由创建的子进程之一执行。

在我尝试过的所有情况下,当前进程的名称始终是“MainProcess”:

>>> import multiprocessing
>>> multiprocessing.current_process().name
'MainProcess'

这是我可以依赖的 python 约定来确保我的代码由主进程运行(假设没有其他进程以这种方式命名)? 否则,我应该使用其他方法来知道哪个进程正在执行一段代码吗?

谢谢!

【问题讨论】:

  • 我看到主进程的type 与子进程不同。这可能是测试它的更好方法。
  • >>> type(multiprocessing.current_process()) multiprocessing.process._MainProcess >>> type(Process()) multiprocessing.process.Process 这看起来是一个可以接受的答案。您应该将此作为答案而不是评论发布,以便我可以接受。

标签: python python-2.7 python-multiprocessing


【解决方案1】:

似乎主进程的type 与子进程不同。主进程是mulitprocessing.process._MainProcess,子进程是multiprocessing.process.Process。这可能是测试它的更好方法。

现在,由于 _MainProcess 类型的名称有一个前导下划线,它意味着“私有”,这意味着它是一个可以更改的实现细节。这似乎不太可能,但您可以检查当前进程是否属于Process 类型,而不是检查它是否属于_MainProcess 类型。

【讨论】:

  • 请注意:_MainProcess 类继承自 Process,这使得 isinstance(multiprocessing.current_process(), multiprocessing.Process) 从主进程和子进程返回 True。该解决方案正在使用type(multiprocessing.current_process()) == multiprocessing.Process,因为这不会检查父类的类型。
【解决方案2】:

虽然可以使用multiprocessing.current_process(),但也许更好的选择是使用multiprocessing.parent_process()。 主进程返回None

它是在 Python 3.8 中添加的,因此在提问时不可用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-12
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 2021-07-17
    • 2020-06-24
    相关资源
    最近更新 更多