12

私は python multiprocessing モジュールで遊んでいて、現在実行中のプロセスの名前を表示できるようにしたいと考えていました。

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、プロセス オブジェクトを呼び出して渡すことができます。

名前は OS レベルの概念ではありません。これは Python レベルであり、実行するプロセスがProcessどこにでもオブジェクトを持っていることは自動的ではありません。

于 2012-07-18T07:28:51.313 に答える