我正在考虑将多处理添加到我的一个脚本中以提高性能。
没什么花哨的,main方法有1-2个参数。
仅在终端上运行四个克隆的相同脚本而不是在 python 代码中实际添加多处理有什么问题吗?
前四个核心:
~$ script.py &
script.py &
script.py &
script.py;
我读过 linux/unix 操作系统会自动在可用内核之间划分程序。
对不起,如果我上面提到的 ^ 东西是完全错误的。以上没有正式学习,都是网上的东西。
我正在考虑将多处理添加到我的一个脚本中以提高性能。
没什么花哨的,main方法有1-2个参数。
仅在终端上运行四个克隆的相同脚本而不是在 python 代码中实际添加多处理有什么问题吗?
前四个核心:
~$ script.py &
script.py &
script.py &
script.py;
我读过 linux/unix 操作系统会自动在可用内核之间划分程序。
对不起,如果我上面提到的 ^ 东西是完全错误的。以上没有正式学习,都是网上的东西。
Martijn Pieters 的评论一针见血,我想。如果您的每个进程只消耗少量内存(这样您就可以轻松地让所有四个进程并行运行而不会耗尽 RAM)并且如果您的进程不需要相互通信,那么启动所有四个进程是最简单的正如您所建议的,从外壳独立处理。
multiprocessing
如果您有稍微复杂的需求,python模块非常有用。例如,您可能有一个程序需要在启动时串行运行,然后为计算密集型部分生成多个副本,最后以串行方式进行一些后处理。multiprocessing
对于这种同步将是无价的。
或者,您的程序可能需要大量内存(可能在科学计算中存储大型矩阵,或在 Web 编程中存储大型数据库)。multiprocessing
让您在不同的进程之间共享该对象,这样您就不会在内存中拥有 n 个数据副本(使用multiprocessing.Value
和multiprocessing.Array
对象)。
multiprocessing
如果您想在仅 4 个内核上运行脚本 100 次,则使用也可能成为更好的解决方案。然后你的基于终端的方法会变得非常讨厌。
在这种情况下,您可能希望使用Pool
模块multiprocessing
中的 a。