arcgis运行python脚本一段时间后会卡,为什么这个python多处理脚本在一段时间后会变慢?...

以script from this answer为基础,我有以下场景:一个文件夹包含2500个大文本文件(每个约55Mb),所有文件都用制表符分隔。基本上是网络日志。在

我需要md5散列每个文件每行中的第二个'column',将修改后的文件保存到其他地方。源文件位于机械磁盘上,目标文件位于SSD上。在

这个脚本处理前25个(大约)文件的速度非常快。然后它就会慢下来。基于前25个文件,它应该在2分钟左右完成所有文件。然而,根据之后的表现,完成这些任务需要15分钟左右。在

它运行在一个有32GB内存的服务器上,任务管理器很少显示使用超过6GB的内存。我把它设置为启动6个进程,但是核心上的CPU使用率很低,很少超过15%。在

为什么会变慢?磁盘读/写问题?垃圾收集器?错误代码?有什么办法加快速度吗?在

这是剧本import os

import multiprocessing

from multiprocessing import Process

import threading

import hashlib

class ThreadRunner(threading.Thread):

""" This class represents a single instance of a running thread"""

def __init__(self, fileset, filedirectory):

threading.Thread.__init__(self)

self.files_to_process = fileset

self.filedir = filedirectory

def run(self):

for current_file in self.files_to_process:

# Open the current file as read only

active_file_name = self.filedir + "/" + current_file

output_file_name = "D:/hashed_data/" + "hashed_" + current_file

active_file = open(active_file_name, "r")

output_file = open(output_file_name, "ab+")

for line in active_file:

# Load the line, hash the username, save the line

lineList = line.split("\t")

if not lineList[1] == "-":

lineList[1] = hashlib.md5(lineList[1]).hexdigest()

lineOut = '\t'.join(lineList)

output_file.write(lineOut)

# Always close files after you open them

active_file.close()

output_file.close()

print "\nCompleted " + current_file

class ProcessRunner:

""" This class represents a single instance of a running process """

def runp(self, pid, numThreads, fileset, filedirectory):

mythreads = []

for tid in range(numThreads):

th = ThreadRunner(fileset, filedirectory)

mythreads.append(th)

for i in mythreads:

i.start()

for i in mythreads:

i.join()

class ParallelExtractor:

def runInParallel(self, numProcesses, numThreads, filedirectory):

myprocs = []

prunner = ProcessRunner()

# Store the file names from that directory in a list that we can iterate

file_names = os.listdir(filedirectory)

file_sets = []

for i in range(numProcesses):

file_sets.append([])

for index, name in enumerate(file_names):

num = index % numProcesses

file_sets[num].append(name)

for pid in range(numProcesses):

pr = Process(target=prunner.runp, args=(pid, numThreads, file_sets[pid], filedirectory))

myprocs.append(pr)

for i in myprocs:

i.start()

for i in myprocs:

i.join()

if __name__ == '__main__':

file_directory = "E:/original_data"

processes = 6

threads = 1

extractor = ParallelExtractor()

extractor.runInParallel(numProcesses=processes, numThreads=threads, filedirectory=file_directory)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《ArcGIS Python常用脚本》是一份包含常用脚本的文档。ArcGIS是一款专业的地理信息系统软件,可以用于地图制作、空间分析和数据管理等工作。而Python是一种常用的编程语言,在ArcGIS中也可以使用Python编写脚本来完成各种地理信息处理任务。 这份文档主要包括了一些常见的Python脚本示例,以帮助用户在ArcGIS中进行地理信息处理。这些脚本可以用于各种地理数据操作,如数据导入、属性查询、空间分析、地图生成等。通过学习和应用这些脚本,用户可以提高工作效率,简化繁琐的操作,并且可以根据需要进行自定义修改。 《ArcGIS Python常用脚本》不仅仅是一份简单的代码集合,还包含了详细的说明和示例。每个脚本都会附带注释,解释脚本的功能和使用方法。这样用户可以更容易地理解和使用这些脚本,甚至可以根据自己的需求进行修改和扩展。 这份文档的目的是帮助ArcGIS用户更好地利用Python编写脚本来完成各种地理信息处理任务。无论是初学者还是有一定经验的用户,都可以从中获益。通过学习和应用这些常用脚本,用户可以更高效地处理地理数据,提高工作效率。 总而言之,《ArcGIS Python常用脚本》是一份有助于ArcGIS用户利用Python编写脚本的文档,它包含了一些常见的脚本示例和详细的说明。通过学习和应用这些脚本,用户可以提高工作效率,简化繁琐的操作,并且可以根据需要进行自定义修改。 ### 回答2: ArcGIS是一款常用的地理信息系统(GIS)软件,而Python是一种常用的编程语言。两者结合使用可以进行各种地理空间数据的分析、处理和可视化。在ArcGIS中,Python可以用来编写脚本,以实现自动化的数据处理和分析任务。 常用的ArcGIS Python脚本包括: 1. 数据导入和导出脚本:可以使用Python脚本将各种常见的地理空间数据格式(如Shapefile、CSV、GDB等)导入到ArcGIS中,或将ArcGIS中的数据导出到其他格式。 2. 空间分析脚本:可以使用Python脚本执行各种空间分析操作,如缓冲区分析、叠加分析、空间插值等。通过编写脚本,可以将复杂的空间分析过程自动化,提高工作效率。 3. 地图生成脚本:可以使用Python脚本生成各种类型的地图,包括静态地图和交互式地图。通过编写脚本,可以自定义地图的样式和内容,满足不同的需求。 4. 地理数据处理脚本:可以使用Python脚本对地理空间数据进行各种处理,如数据清洗、特征提取、数据转换等。通过编写脚本,可以批量处理大量的地理数据,提高数据处理的效率。 5. 工作流程自动化脚本:可以使用Python脚本将多个ArcGIS操作组合起来,形成完整的工作流程。通过编写脚本,可以实现一键式地执行多个操作,简化工作流程,减少人工操作的时间和精力。 总之,ArcGIS Python脚本是一种强大的工具,可以帮助地理信息专业人士在ArcGIS软件中进行各种数据处理和分析任务的自动化。熟练掌握ArcGIS Python脚本编程,可以提高工作效率,减少重复劳动,使地理信息工作更加高效。 ### 回答3: 首先,ArcGIS是一款专业的地理信息系统软件,而Python是一种功能强大的编程语言。ArcGIS Python是通过使用Python编写和执行脚本来扩展ArcGIS功能的方法。 ArcGIS Python常用脚本.docx是一个文档,其中包含了常见的ArcGIS Python脚本示例和说明。这些脚本可以帮助用户更高效地处理和分析地理空间数据。 在这个文档中,你可能会找到一些常用的ArcGIS Python脚本,如数据导入导出脚本、地图制作脚本、空间分析脚本等。这些脚本可以帮助用户在ArcGIS环境中自动化执行特定的任务。 例如,数据导入导出脚本可以帮助用户将不同格式的地理空间数据转换为ArcGIS能够识别的格式,以便用户可以在ArcGIS中进行进一步的分析和可视化。 地图制作脚本可以帮助用户根据特定的需求自动生成地图,包括选择合适的底图、添加地理要素、设置符号等。 空间分析脚本可以帮助用户进行常见的空间分析任务,如缓冲区分析、叠加分析、地理加权回归等,以便用户可以从地理空间数据中提取有价值的信息。 总之,ArcGIS Python常用脚本.docx提供了一些常见的ArcGIS Python脚本示例,这些脚本可以帮助用户在ArcGIS环境中更好地处理和分析地理空间数据。用户可以根据自己的需求和学习目标来查找和学习适合自己的脚本示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值