如何从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)))
输出: