我想询问用户输入,然后将所有输入存储到列表中。输入将与我定义的函数完全相同。
inp = raw_input("functions you want to execute, sep by commas:")
alist = []
for j in inp.split(','):
alist.append(j)
def func1():
print 'FUNCTION 1'
def func2():
print 'FUNCTION 2'
def func3():
print 'FUNCTION 3'
for i in alist:
eval(i+'()') #I want to do this but all at the same time
在这种情况下,当被要求输入时,我想要执行所有3个函数时,列表将如下所示:
['func1','func2','func3']
我想要做的是同时执行所有操作。
我考虑过多处理,但我不知道如何从列表中进行处理。
另外,请不要讲授我对eval()的使用,这段代码用于分子动力学模拟。
答案 0 :(得分:1)
您可以使用multiprocessing
模块
from multiprocessing import Process
def A():
print("A")
def B():
print("B")
def runAll(fns):
proc = []
for fnName in fns:
fn = globals()[fnName]
p = Process(target=fn)
p.start()
proc.append(p)
for p in proc:
p.join()
然后你这样称呼它们:
runAll(['A','B'])
如果函数未在同一模块中定义,则将全局变量行(globals()
...)替换为:
fn = getattr(module, fnName)
在此处试试:Repl.it
作为旁注,允许用户调用任意函数是一个坏主意(安全性)。您可以明确地仅接受来自预定义字符串列表的操作。