12

我正在玩 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

4

2 回答 2

17

您可以使用以下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
于 2012-07-18T07:49:16.860 回答
3

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

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

于 2012-07-18T07:28:51.313 回答