我有一个python脚本,单独运行时效果很好.它基于硬编码的输入目录,扫描所有.mdb文件并将其放入列表中,然后在for循环中遍历它们.每次迭代都涉及多个表限制,连接,查询等.
唯一的问题..在输入数据集上运行大约需要36个小时,而这个脚本只会在这个实例中用于此数据集,我想提高性能,因为我经常编辑字段选择,结果包括,加入方法等我想说它需要很长时间,因为我的脚本效率低下,但任何低效率都会很小,因为几乎所有的处理时间都专用于地理处理器对象.
我在主脚本中的所有相关内容是:
indir = "D:\\basil\\input"
mdblist = createDeepMdbList(indir)
for infile in mdblist:
processMdb(infile)
Run Code Online (Sandbox Code Playgroud)
它在顺序执行时也能完美执行.
我尝试过使用Parallel Python:
ppservers = ()
job_server = pp.Server(ppservers=ppservers)
inputs = tuple(mdblist)
functions = (preparePointLayer, prepareInterTable, jointInterToPoint,\
prepareDataTable, exportElemTables, joinDatatoPoint, exportToShapefile)
modules = ("sys", "os", "arcgisscripting", "string", "time")
fn = pp.Template(job_server, processMdb, functions, modules)
jobs = [(input, fn.submit(input)) for input in inputs]
Run Code Online (Sandbox Code Playgroud)
它成功创建了8个进程,8个地理处理器对象......然后失败了.
我没有对内置的Python多线程工具进行过广泛的实验,但希望能够提供一些指导,简单地生成多达8个进程,这些进程通过mdblist表示的队列.在任何时候都不会尝试由多个进程同时写入或读取任何文件.为了使事情暂时变得简单,由于这个问题,我还删除了所有的日志记录工具; 我已经足够多次运行这个脚本,知道它的工作原理除了4104输入的4个文件之外,这些文件的数据格式略有不同.
建议吗?尝试多线程Arc Python脚本的智慧?