gpt4 book ai didi

python - 并行运行单独的进程 - Python

转载 作者:太空狗 更新时间:2023-10-29 20:36:37 25 4
gpt4 key购买 nike

我使用 python 的“多处理”模块在多个内核上运行单个进程,但我想并行运行几个独立的进程。

例如,进程一解析大文件,进程二在不同文件中寻找模式,进程三做一些计算;所有这三个具有不同参数集的不同进程都可以并行运行吗?

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 hrs。是否可以并行运行这三个进程?这样它们就可以同时在不同的处理器/内核上运行,并且当大部分时间(Process2)完成时我们会转到最终过程。

最佳答案

来自 16.6.1.5. Using a pool of workers :

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]"

因此,您可以对池应用异步并在一切准备就绪后获取结果。

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
# (...)

关于python - 并行运行单独的进程 - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19080792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com