python多处理 - 访问使用Process.start调用的函数内的进程名称(target = func)

时间:2012-07-18 07:07:02

标签: python inheritance multiprocessing

我正在使用python多处理模块,并希望能够显示当前正在执行的进程的名称。

如果我创建一个继承自multiprocessing.Process的自定义MyProcess类,我可以按以下方式打印进程的名称

from multiprocessing import Process

class MyProcess(Process):
   def __init__(self):
        Process.__init__(self)

   def run(self):
        #do something nasty and print the name
        print self.name

p = MyProcess()
p.start()

但是,如果我使用Process类的构造函数

创建进程
from multiprocessing import Process
def somefunc():
    print Process.name                 #1

p = Process(target=somefunc)
p.start()
print p.name                           #2

#2有效,但#1没有。有没有办法可以在somefunc内打印当前正在执行的进程的名称?

2 个答案:

答案 0 :(得分:10)

您可以使用current_process功能:

from multiprocessing import Process, current_process

def somefunc():
    print current_process().name

if __name__ == '__main__':
    p = Process(target=somefunc)
    p.start()
    print p.name

答案 1 :(得分:3)

不是传递target参数,而是覆盖run方法。从那里,您可以调用someFunc并将流程对象传递给它。

该名称不是操作系统级别的概念。它是Python级别,你执行的进程甚至在任何地方都有一个Process对象,这不是自动的。