如何同时运行多个功能

时间:2015-09-04 18:53:59

标签: python

我有以下代码

my_func1()
my_func2()
my_func3()
my_func4()
my_func5()

是否可以同时计算功能的数据,而不是一个接一个地计算?

4 个答案:

答案 0 :(得分:3)

您可以使用多处理或线程 python中的线程并不实际并行运行,但允许您同时运行这些函数(并且python将迭代它们,每次执行几行)

使用多处理它们将并行运行(假设你有多个cpu核心),但它们不会共享内存。 这是一个多处理的示例

from multiprocessing import Process
p = Process(target=myfunc1)
p.start()
p2 = Process(target=myfunc2)
p2.start()
# and so on
p.join()
p2.join()
# the join means wait untill it finished

你可以在这里阅读更多相关内容:

https://docs.python.org/2/library/multiprocessing.html

https://wiki.python.org/moin/GlobalInterpreterLock

答案 1 :(得分:3)

我最喜欢的方法是使用concurrent.futures这是一个标准的Python库(3.2及以上版本或作为Python 2.7的独立包提供):

from concurrent.futures import ThreadPoolExecutor

executors_list = []

with ThreadPoolExecutor(max_workers=5) as executor:
    executors_list.append(executor.submit(my_func1, arg1, arg2))
    executors_list.append(executor.submit(my_func2, arg1, arg2))
    executors_list.append(executor.submit(my_func3, arg1, arg2))

for x in executors_list:
    print(x.result())

这将同时运行my_func1my_func2my_func3,并将arg1arg2传递给每个人。然后,它会在所有结果可用后立即打印出来。

答案 2 :(得分:2)

import thread


thread.start_new_thread(my_func1, ())
thread.start_new_thread(my_func2, ())
thread.start_new_thread(my_func3, ())
thread.start_new_thread(my_func4, ())
thread.start_new_thread(my_func5, ())

你可以像这样编写函数

答案 3 :(得分:1)

from multiprocessing import Process
from time import sleep

def f(name):
    print 'hello', name
    sleep(1)

考虑上面:

如果你这样做:

f('bob')  #start
f('alice') #wait until bob's done
f('jack') #wait until alice is done
f('cake') #wait until jack is done
f('paul') #wait until cake is done
print 'done'

在您看到done

之前,您将等待5秒钟

但是,如果使用多处理,则可以生成多个进程以同时运行该函数。

Process(target=f, args=('bob',)).start() #start now
Process(target=f, args=('alice',)).start() #start now
Process(target=f, args=('jack',)).start() #start now
Process(target=f, args=('cake',)).start() #start now
Process(target=f, args=('paul',)).start() #start now
print 'done' #start now