2016-04-07 54 views
0

Çalışma zamanında yeni işlem tarafından hangi işlevin çalıştırılacağına karar vermenin bir yolu var mı? Ben programı çalıştırdığınızdaÇok işlevli işlem için çalışma zamanı işlevi hedefi.Process

varsayalım ben şimdi 2 fonksiyon

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() 

var (multiprocessing.Process tarafından oluşturulan) Bu bana hata verir

enter function to be run = f 

TypeError: 'str' object is not callable 

Bu apaçık görünüyor çünkü işlevin adı eşleşmeli, ancak bu durumda addeğişkeninde Bir dize olarak.

cevap

2

kullanın sözlüğü:

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

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

O func_namefunctions aslında olduğundan emin olmak için daha iyi olurdu. Ayrıca, .get()

+0

için ikinci bir argüman olarak verilebilecek varsayılan bir işleviniz olabilir. Bunu yapamam. Kodun yazılmasından önce, kaç tane fonksiyonun ve isimlerinin yazıldığını göremiyorum. Kullanıcı herhangi bir isimle herhangi bir sayıyı verebilir ve bunları çalıştırmak için kodu sorabilir. Çok işlem için bir sarıcı gibi. – Haris

+0

@Haris: Bunun yerine * globals(). Get (func_name) 'yi kullanabilirsiniz. – zondo

+0

Büyü. Aweome adam. :) Çok teşekkürler. – Haris