2017-07-21 9 views
1

私はmultiprocessingをPython(2.7)で入手しました。Pythonマルチプロセッシング:プロセスが起動しない

私は、次のコードを実行しよう:

from time import sleep 
from multiprocessing import Process 
import multiprocessing 

def func(x): 
    print("start %s"%(x)) 
    sleep(x) 
    print("end %s"%(x)) 
    return 

if __name__ == '__main__': 

    Process(target=func(10)).start() 
    Process(target=func(1)).start() 

この戻りのように何か:

start 10 
end 10 
start 1 
end 1 

start 1と​​は先験的にはend 10の前に現れる必要がありますが。

私はここで何が不足しているのか理解していただきありがとうございます。

答えて

3

あなたが書く:これはProcessfuncを与えられていないんPythonの最初が左から右引数を評価するので、それはfunc(10)結果を与えていることを意味

Process(target=func(10)).start()

、およびこれらの評価の結果を外部関数(ここではProcess(..)呼び出し)に渡します。

サブプロセスが機能を評価し、あなたが好きなことを書くべきせるために:

Process(target=func,args=(10,)).start()

今、あなたはfunc機能参照を渡し、そしてあなたが持つ引数argsタプルを提供サブプロセスが関数を呼び出すことになります。次に、サブプロセスはfunc(10)を呼び出します(そして別のサブプロセスはとなります)func(1)と同時に実行されます。

+1

あなたは私よりも速かった;)私たちが期待していないようなものが働いているときは、できるだけ多目的で印刷することをお勧めします。 –

+1

私には恥です。あなたの助けに感謝します。 – Bob

1

Processを作成する場合、targetは、引数または括弧を付けずに関数名にしてから、args=(your args)を追加する必要があります。たとえば、次のように

Process(target=func, args=(10,)).start() 
+0

ありがとうございました。 – Bob

1

ウィレム・ヴァン・Onsem答え使い方:あなたは、彼らが呼ばれているとき、彼らが終了したときに表示するプロセスのより多くを使用することができます

from time import sleep 
from multiprocessing import Process 
import multiprocessing 

def func(x, called_from): 
    print("start %s from %s"%(x, called_from)) 
    sleep(x) 
    print("end %s from %s"%(x, called_from)) 
    return 

if __name__ == '__main__': 

    Process(target=func, args=(10,'1')).start() 
    Process(target=func, args=(1,'2')).start() 

を。他のプロセス呼び出しを使用して、その動作を確認します。

+0

ありがとうございました。 – Bob

関連する問題