我有以下代码
my_func1()
my_func2()
my_func3()
my_func4()
my_func5()
是否可以同时计算功能的数据,而不是一个接一个地计算?
答案 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
你可以在这里阅读更多相关内容:
答案 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_func1
,my_func2
和my_func3
,并将arg1
和arg2
传递给每个人。然后,它会在所有结果可用后立即打印出来。
答案 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
但是,如果使用多处理,则可以生成多个进程以同时运行该函数。
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