gpt4 book ai didi

python - 多重处理 python 方法

转载 作者:太空宇宙 更新时间:2023-11-03 14:59:44 25 4
gpt4 key购买 nike

我编写了一个名为“get_names”的方法,它接受参数作为包含多个 python 脚本的文件夹的路径(其中可能有多个文件夹),并返回这些 python 脚本内所有方法的名称。

但是由于该文件夹中的Python脚本数量巨大,打印所有方法的名称需要花费大量时间。我计划创建 3-4 个进程,这些进程将运行三分之一/四分之一的 Python 脚本数量。

我应该如何编写方法来执行此操作,以便我的方法知道它必须处理脚本的哪一部分?

names = name_loader.get_names(name_prefix=params.get('name_prefix'))

“name_prefix”可以是/users/Aditya/workspace/codes/,其中“codes”包含所有 python 脚本。

最佳答案

你可以这样做:

import multiprocessing

if __name__ == "__main__":
calc_pool = multiprocessing.Pool(4)
path = 'list with your paths'
methode = calc_pool.map(get_names, path)

您可能需要编辑您的方法,因此它将包含 python 文件的列表分为 4 个子列表,在这种情况下,每个进程将处理一个子列表,这些子列表一起就是您的完整列表。例如:

import multiprocessing

if __name__ == "__main__":
calc_pool = multiprocessing.Pool(4)
path = 'list with your paths'
path = split(path, parts = 4)
data_pack = ((path[0]), (path[1]), (path[2]), (path[3]))
methode = calc_pool.map(get_names, data_pack)

在这种情况下,您必须打包数据,因为 .map 只接受一个参数。在这种情况下,方法 split 会使用如下所示的路径拆分列表:

path = ['path_0', 'path_1', 'path_2', 'path_3']

类似的事情:

path = [['path_0'], ['path_1'], ['path_2'], ['path_3']]

请记住,多处理进程不共享数据,并且您希望提交尽可能少的数据,因为向每个进程发送数据的速度非常慢。

这也明显增加了 CPU 和 RAM 的使用。

我选择多处理而不是线程的原因是,多处理使您能够真正并行运行任务,而线程 code> 主要为您提供 I/O 任务方面的优势。

编辑:另请记住,if __name__ == "__main__": 在 Windows 系统上是必需的,多处理 才能正常工作。

关于python - 多重处理 python 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45208717/

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