Python一次仅使用一个内核即可工作吗?


13

最近我注意到python一次只使用一个内核。有没有办法使它使用所有资源(第二个内核),也许是特殊的构建或命令?


1
如果您正在运行批处理以执行重复的任务,并且脚本执行的是正确的事情,并且利用一个内核的100%来执行有用的操作,则可能不会那么危险。启动第二个进程,该进程也以100%运行另一个内核。总效果可能比使用单线程过程更好。如果您只有一项繁重的任务要处理,情况就不同了。
user30184 2014年

这已经讨论看到这个线程的详细信息和解决方案gis.stackexchange.com/questions/55048/...
伊尔凡

请问您是否可以编辑问题,以弄清楚它是关于Python还是更特定的ArcPy(如您的标签所暗示)?如果是后者,您是否可以包括一些细节来证明是这种情况,即您是如何注意到的?
PolyGeo

Answers:


15

您可以使用子流程来利用Python脚本中的多个内核,以便可以并行运行多个任务。但是您不能将单个任务划分为多个核心。请参阅以下常见问题解答中的详细说明:ArcGIS 10是否支持多核处理器和/或64位操作系统?

如果您是经验丰富的Python用户,那么您可能会对Dev Dev 2014的此用户演示中介绍的方法感兴趣,该方法称为“ 使用Python多处理和关键路径方法进行并行地理处理”,但该方法仍然不允许您将多个内核用于相同的任务。

否则,您将不得不等待今年晚些时候发布的ArcGIS Pro(全64位应用程序)才能测试多线程的性能……(或立即尝试Beta版)


4

如前所述,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帐户,以便能够运行专业版)。


1

Pypy是python的兼容版本,其运行速度比CPython(“标准” python)快4-5倍。

如果您有足够的勇气可以从源代码构建它,那么可以使用一个分支 “可以在同一进程中并行运行多个独立的需要CPU的线程”。这意味着您无需重新编写任何代码即可获得多线程的好处。


0

简单的答案是否定的。更好的答案取决于情况。

由于实现了CPython(最常用的python),因此可以安全地假设您的Python不能真正利用多线程。看到:

http://en.wikipedia.org/wiki/Global_Interpreter_Lock

https://wiki.python.org/moin/GlobalInterpreterLock

请注意,IO不受GIL的影响。

现在您可以解决此问题。正如其他人指出的那样,您可以生成子流程,而多处理库可以为您提供帮助。


1
I / O是不受干扰的,但是调用大多数用C实现的功能也是如此,包括大多数GP工具和numpy中的所有功能。在实际的GIS环境中,GIL的局限性比人们想象的要少。
Jason Scheirer 2014年

0

我无法解决ArcGIS问题,但是就使用Python处理多个任务而言,您是否考虑过像Celery(celeryproject.org)这样的任务管理器?这将需要您识别不同的处理任务,将它们提交给“经理”进行分发,运行“工人”以从经理那里接收任务,进行处理并报告结果。

这是很容易实现的,但具有令人难以置信的灵活性,并允许您充分利用处理能力(即使用那些空闲的内核)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.