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

时间:2018-05-29 09:15:53

标签: python multithreading multiprocessing

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

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

1 个答案:

答案 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

作为旁注,允许用户调用任意函数是一个坏主意(安全性)。您可以明确地仅接受来自预定义字符串列表的操作。