[英]Run separate processes in parallel - Python
我使用 python 'multiprocessing' 模塊在多個內核上運行單個進程,但我想並行運行幾個獨立進程。
例如,進程一解析大文件,進程二在不同文件中查找模式,進程三做一些計算; 可以並行運行所有這三個具有不同參數集的不同處理嗎?
def Process1(largefile):
Parse large file
runtime 2hrs
return parsed_file
def Process2(bigfile)
Find pattern in big file
runtime 2.5 hrs
return pattern
def Process3(integer)
Do astronomical calculation
Run time 2.25 hrs
return calculation_results
def FinalProcess(parsed,pattern,calc_results):
Do analysis
Runtime 10 min
return final_results
def main():
parsed = Process1(largefile)
pattern = Process2(bigfile)
calc_res = Process3(integer)
Final = FinalProcess(parsed,pattern,calc_res)
if __name__ == __main__:
main()
sys.exit()
在上面的偽代碼中,Process1、Process2 和 Process3 是單核進程,即它們不能在多個處理器上運行。 這些進程按順序運行,需要 2+2.5+2.25hrs = 6.75 小時。 是否可以並行運行這三個進程? 這樣它們就可以在不同的處理器/內核上同時運行,並且當大部分時間(Process2)完成時,我們才進入最終進程。
from multiprocessing import Pool
def f(x):
return x*x
if __name__ == '__main__':
pool = Pool(processes=4) # start 4 worker processes
result = pool.apply_async(f, [10]) # evaluate "f(10)" asynchronously
print result.get(timeout=1) # prints "100" unless your computer is *very* slow
print pool.map(f, range(10)) # prints "[0, 1, 4,..., 81]"
因此,您可以對池 apply_async 並在一切准備就緒后獲得結果。
from multiprocessing import Pool
# all your methods declarations above go here
# (...)
def main():
pool = Pool(processes=3)
parsed = pool.apply_async(Process1, [largefile])
pattern = pool.apply_async(Process2, [bigfile])
calc_res = pool.apply_async(Process3, [integer])
pool.close()
pool.join()
final = FinalProcess(parsed.get(), pattern.get(), calc_res.get())
# your __main__ handler goes here
# (...)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.