最近我注意到python一次只使用一个内核。有没有办法使它使用所有资源(第二个内核),也许是特殊的构建或命令?
最近我注意到python一次只使用一个内核。有没有办法使它使用所有资源(第二个内核),也许是特殊的构建或命令?
Answers:
您可以使用子流程来利用Python脚本中的多个内核,以便可以并行运行多个任务。但是您不能将单个任务划分为多个核心。请参阅以下常见问题解答中的详细说明:ArcGIS 10是否支持多核处理器和/或64位操作系统?
如果您是经验丰富的Python用户,那么您可能会对Dev Dev 2014的此用户演示中介绍的方法感兴趣,该方法称为“ 使用Python多处理和关键路径方法进行并行地理处理”,但该方法仍然不允许您将多个内核用于相同的任务。
否则,您将不得不等待今年晚些时候发布的ArcGIS Pro(全64位应用程序)才能测试多线程的性能……(或立即尝试Beta版)
如前所述,ArcGIS Desktop不支持多处理。在谈论在桌面环境中处理GIS数据集时,我试图找出是否可以将大型工作流程拆分为较小的块,这些块将在加载多个内核的同时进行计算。由于GP工具的行为可能存在显着差异,因此几乎每种情况都应单独进行调查。
想一想解决一个简单的数学问题时更快的方法。计算从1到100的所有数字的最快方法是什么?
1)将结果一一求和,然后将总和相加(1 + 2 = 3、3 + 3 = 6、6 + 4 = 10,依此类推)。一个核心正在从事这项任务。
2)预先将值分割成各个块,然后首先将这些值相加(1到30、31到60和60到100)。三个内核将同时工作(最后一步是将接收到的三个值相加)。
由于不同的GP工具是使用不同的big-O表示法的不同算法的实现,因此您可能需要在提交多重处理方面进行不同的处理。
一个很好的起点是学习Python中的多处理库如何工作。我用得很重。
我还注意到,通过使用64位Python从命令行运行Python脚本通常可以提高运行速度(与IDE的运行相比,但是在您的计算机上可能不是这种情况)。后台地理处理是10.1中引入的,但是请尝试使用64位Python运行Python脚本,并查看性能如何受到影响。
Beta 5中提供了在另一个答案中命名的ArcGIS Pro可供下载(请记住,您需要成为Esri Beta社区的参与者才能提交任何错误并有权访问ArcGIS Online for Organizations帐户,以便能够运行专业版)。
Pypy是python的兼容版本,其运行速度比CPython(“标准” python)快4-5倍。
如果您有足够的勇气可以从源代码构建它,那么可以使用一个分支 “可以在同一进程中并行运行多个独立的需要CPU的线程”。这意味着您无需重新编写任何代码即可获得多线程的好处。
简单的答案是否定的。更好的答案取决于情况。
由于实现了CPython(最常用的python),因此可以安全地假设您的Python不能真正利用多线程。看到:
http://en.wikipedia.org/wiki/Global_Interpreter_Lock
https://wiki.python.org/moin/GlobalInterpreterLock
请注意,IO不受GIL的影响。
现在您可以解决此问题。正如其他人指出的那样,您可以生成子流程,而多处理库可以为您提供帮助。