对你的问题有些好的回答。我在多处理方面的经验有限,但让你所有的计算机核心正常工作通常会加快速度。如果您有一个四核处理器,在脚本执行期间只运行大约25%,那么您可能会从中受益。你只需要注意如何应用它,以防一件事总是发生在另一件事之前。如果您使用的是文件geodatabase而不是企业gdb,那么您的瓶颈可能是磁盘。如果gdb是远程的,网络速度可能是个问题。不管怎样,多处理都无济于事。Windows上的资源监视器可以让您大致了解处理器/磁盘/RAM/网络的利用率。在
我刚刚使用了一个类似的脚本,使用rpy2和PostGIS的数据。它仍然花了大约30个小时,但这比100个小时要好得多。我还没有在Arc中使用过多处理(我主要在开源环境中工作),但我知道有人使用过。在
多处理的一个非常简单的实现:from multiprocessing import Pool
def multi_run_wrapper(gdblist):
"""Helper function to unpack argument lists during multiprocessing.
Modified from: http://stackoverflow.com/a/21130146/4062147"""
return gdb_append(*gdblist) # the * unpacks the list
def gdb_append(gdb_id):
...
# script starts here #
gdblist = [......]
if __name__ == '__main__':
p = Pool()
p.map(multi_run_wrapper, gdblist)
print("Script Complete")
通常情况下,您将加入池的结果,但由于您正在使用它来执行任务,所以我不确定是否有必要这样做。其他人可能会插嘴说什么是最佳实践。在