📜  如何从Python Multiprocess 获取进程 ID?

📅  最后修改于: 2022-05-13 01:54:27.420000             🧑  作者: Mango

如何从Python Multiprocess 获取进程 ID?

在本文中,我们将看到如何从Python Multiprocess 获取进程 id 为此我们应该使用multiprocessing.current_process()方法来获取多进程 id。多处理是指系统同时支持多个处理器的能力。多处理系统中的应用程序被分解为独立运行的较小例程。操作系统将这些线程分配给提高系统性能的处理器。

考虑具有单个处理器的计算机系统。如果同时分配了多个进程,它将不得不中断每个任务并短暂切换到另一个任务,以保持所有进程继续进行。
这种情况就像一个厨师独自在厨房工作。他必须完成几项任务,例如烘焙、搅拌、揉面团等。

示例 1:

首先,我们需要在Python导入一个多处理库。

Python3
# importing library
import multiprocessing
  
# define function
def twos_multiple(y):
      
    # get current process
    print(multiprocessing.current_process())
      
    return y * 2
  
pro = multiprocessing.Pool()
  
print(pro.map(twos_multiple, range(10)))


Python3
import multiprocessing
  
def twos_multiple(x):
        
    proc = multiprocessing.Process()
      
    curr_proc = multiprocessing.current_process()
      
    print('current process:', curr_proc.name, curr_proc._identity)
  
    print('created process:', proc.name, proc._identity)
      
    return x * 2
  
pro = multiprocessing.Pool()
  
print(pro.map(twos_multiple, range(10)))


输出:

示例 2:

Multiprocessing 将为每个进程维护一个 itertools.counter 对象,该对象用于为其生成的任何子进程生成一个 _identity 元组,顶级进程生成具有单值 ID 的子进程,并且它们生成具有两个-值 ID,等等。然后,如果没有名称传递给 Process 构造函数,它会根据 _identity 使用 ':'.join(...) 自动生成名称。然后 Pool 使用 replace 更改进程的名称,使自动生成的 id 保持不变。

自动生成的名称是唯一的。它将返回进程对象本身,进程有可能是它自己的身份。

所有这一切的结果是,尽管两个进程可能具有相同的名称,因为您在创建它们时可能会为其分配相同的名称,如果您不触摸名称参数,它们是唯一的。此外,理论上您可以使用 _identity 作为唯一标识符;但我认为他们将该变量设为私有是有原因的!

蟒蛇3

import multiprocessing
  
def twos_multiple(x):
        
    proc = multiprocessing.Process()
      
    curr_proc = multiprocessing.current_process()
      
    print('current process:', curr_proc.name, curr_proc._identity)
  
    print('created process:', proc.name, proc._identity)
      
    return x * 2
  
pro = multiprocessing.Pool()
  
print(pro.map(twos_multiple, range(10)))

输出: