2016-04-07 9 views
0

実行時に新しいプロセスで実行する関数を決定する方法はありますか? (multiprocessing.Processによって作成された)ランタイム関数からマルチプロセッシングへのターゲット

は、これは明白なようだ、私はプログラム

enter function to be run = f 

を実行したときに、私は2機能

def f(): 
    print("In f") 

def g(): 
    print("In g") 

func_name = str(input("enter function to be run = ")) 

multiprocessing.Process(target = func_name, args =()).start() 

今これは私にエラーを与えている

TypeError: 'str' object is not callable 

を仮定します関数の名前は一致しなければなりませんが、この場合、名前は変数にありますを文字列として返します。

functions = {'f': f, 'g': g} 

multiprocess.Process(target=functions.get(func_name), args=()).start() 

func_namefunctionsに実際にあることを確認する方が良いでしょう:

答えて

2

は、辞書を使用してください。また、2番目の引数として与えられるデフォルトの関数を.get()に設定することもできます。

+0

実際にはできません。私は、コードが書かれる前に、関数がいくつあるのか、その名前は、最初はありません。ユーザーは任意の名前の任意の数の関数を与えることができ、コードを実行するように要求します。そのようなマルチプロセッシングのためのラッパーのような。プロセス。 – Haris

+0

@Haris:代わりに 'globals()。get(func_name)'を使うことができます。 – zondo

+0

マジック。親切な男。 :) どうもありがとう。 – Haris

関連する問題