我在寫一些可以很容易並行化的開放式cv代碼。但我遇到了一個問題。蟒蛇多線程的例子一般是這樣的:有沒有辦法在python中重新使用線程工作?
from multiprocessing.dummy import Pool
def slow_function(input):
** opencv transforms and things **
return output
worker_pool = Pool(4)
result = worker_pool.map(slow_function,list_of_inputs)
worker_pool.close()
worker_pool.join()
我已經得到這爲我的代碼工作,但我一直在計時它和線worker_pool = Pool(4)
本身就需要100毫秒。其餘代碼運行速度非常快。
這產生了100ms的最小開銷,這使得不是特別有用。我的應用程序是實時的,所以即使我的代碼的其餘部分立即運行,我也會被限制在10fps。
看來我應該能夠避免每個週期創建和銷燬池,從而節省了這100ms。有沒有辦法做到這一點?理想情況下,我想打電話給map
然後join
,只是有工人「忘記」,他們甚至跑到什麼,一旦他們跑slow_funcion
並返回
非常好!這工作。執行時間從135ms(單線程)和110ms(多線程)變爲40ms(多線程,重用工人)。謝謝! – Drew