У меня есть скрипт на python, который прекрасно работает, когда запускается сам по себе. Основываясь на жестко закодированном входном каталоге, он сканирует все файлы .mdb и помещает их в список, а затем просматривает их все в цикле for. Каждая итерация включает в себя несколько ограничений таблицы, объединений, запросов и т. Д.
Единственная проблема ... требуется около 36 часов для запуска входного набора данных, и хотя этот сценарий будет использоваться только для этого набора данных в этом случае, я хотел бы повысить производительность, так как я часто редактирую выбор полей, результаты включить, объединить методы и т. д. Я хотел бы сказать, что это занимает много времени, потому что мой сценарий неэффективен, но любая неэффективность будет небольшой, поскольку почти ВСЕ время обработки отводится объекту геопроцессора.
Все, что я имею отношение к моему основному сценарию:
indir = "D:\\basil\\input"
mdblist = createDeepMdbList(indir)
for infile in mdblist:
processMdb(infile)
Также выполняется безупречно при последовательном выполнении.
Я пытался использовать 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]
Ему удается создать 8 процессов, 8 объектов геопроцессора ... и затем происходит сбой.
Я не экспериментировал со встроенными инструментами многопоточности Python, но надеялся, что какое-то руководство просто вызовет до 8 процессов, проходящих через очередь, представленную mdblist. Ни в коем случае нельзя пытаться записать или прочитать какие-либо файлы несколькими процессами одновременно. Чтобы сделать вещи временно проще, я также удалил все свои инструменты регистрации из-за этой проблемы; Я запускал этот сценарий достаточно раз, чтобы знать, что он работает, за исключением 4 файлов ввода 4104, которые имеют немного разные форматы данных.
Совет? Мудрость при попытке многопоточности скриптов Arc Python?