運行多個功能,我有以下代碼如何在同一時間
my_func1()
my_func2()
my_func3()
my_func4()
my_func5()
是否有可能在同一時間來計算功能的數據,而不是一個又一個?
運行多個功能,我有以下代碼如何在同一時間
my_func1()
my_func2()
my_func3()
my_func4()
my_func5()
是否有可能在同一時間來計算功能的數據,而不是一個又一個?
可以使用多或線程在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
樣品,你可以閱讀更多關於它在這裏:
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,())
你可以跟帖像
在python 3上做這個工作嗎? – PiccolMan
看看這個答案爲一個深入的答案:http://stackoverflow.com/questions/6319268/what-happened-to-thread-start-new-thread-in-python-3 – Yurippenet
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'
你最終會等待5秒鐘,你看到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
我喜歡的方式是使用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
傳遞給每一個。一旦它們可用,它將按順序打印所有結果。
你絕對確信你需要這麼做嗎? – TigerhawkT3
https://docs.python.org/2/library/multiprocessing.html – MattDMo
在同一時間?可能不會,但是你可以對它進行多處理,所以人們不必等待另一個完成 – taesu