有没有办法同时执行多个功能,但从一个列表中?



我想要求用户输入,然后将所有输入存储到一个列表中。输入将与我定义的函数完全相同。

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(( 的用法,这段代码用于分子动力学模拟。

您可以使用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


作为旁注,允许用户调用任意函数是一个坏主意(安全方面(。相反,您可以显式地只接受预定义字符串列表中的操作。

相关内容

  • 没有找到相关文章

最新更新