Недавно я заметил, что Python использует только одно ядро для работы. Есть ли способ, может быть, специальные сборки или команды, чтобы заставить его использовать все ресурсы (второе ядро)?
Недавно я заметил, что Python использует только одно ядро для работы. Есть ли способ, может быть, специальные сборки или команды, чтобы заставить его использовать все ресурсы (второе ядро)?
Ответы:
Вы можете использовать подпроцессы, чтобы использовать преимущества нескольких ядер в скрипте Python, чтобы несколько задач могли выполняться параллельно. Но вы не можете разделить одну задачу на несколько ядер. Подробное объяснение см. В этом FAQ: Поддерживает ли ArcGIS 10 многоядерные процессоры и / или 64-битные операционные системы?
Если вы опытный пользователь Python, вас может заинтересовать подход, описанный в этой пользовательской презентации на Dev Summit 2014, который называется « Параллельная геообработка с использованием методологии многопроцессорной обработки Python и критического пути» , однако он не позволит вам использовать несколько ядер для та же задача.
В противном случае вам придется подождать выхода ArcGIS Pro (полностью 64-битное приложение) в конце этого года, чтобы протестировать работу многопоточности ... (или попробовать бета-версию прямо сейчас)
Как уже упоминалось, в ArcGIS Desktop нет поддержки многопроцессорности. Говоря об обработке наборов данных ГИС в среде рабочего стола, я пытаюсь выяснить, можно ли разделить большой рабочий процесс на более мелкие порции, которые будут рассчитываться при загрузке нескольких ядер. Почти каждый случай должен расследоваться индивидуально, так как поведение инструментов GP может значительно отличаться.
Подумайте, что быстрее сделать при решении простой математической задачи. Какой самый быстрый способ подсчета всех чисел от 1 до 100?
1) путем суммирования результатов по одному и добавления суммы друг к другу постепенно (1 + 2 = 3, 3 + 3 = 6,6 + 4 = 10 и т. Д.). Одно ядро работает над этой задачей.
2) предварительно разбить значения на отдельные порции и сначала суммировать значения (от 1 до 30, от 31 до 60 и от 60 до 100). Три ядра будут работать в одно и то же время (последним шагом будет суммирование трех полученных значений).
Поскольку разные инструменты GP являются реализациями разных алгоритмов с разной нотацией big-O , вам, вероятно, придется подходить к ним по-разному с точки зрения представления множественных процессов.
Хорошей отправной точкой было бы узнать, как работает многопроцессорная библиотека в Python. Я использую довольно сильно.
Я также заметил, что запуск сценариев Python из командной строки с использованием 64-разрядного Python обычно приводит к более быстрому запуску (по сравнению с запуском IDE, но на вашем компьютере это может быть не так). Фоновая геообработка была введена в 10.1, но попробуйте запустить скрипты Python с 64-битным Python и посмотреть, как это влияет на производительность.
ArcGIS Pro, названный в другом ответе, доступен для загрузки в бета-версии 5 (имейте в виду, что вам необходимо быть участником сообщества бета-версии Esri, чтобы отправлять сообщения об ошибках и иметь доступ к учетной записи ArcGIS Online for Organizations , чтобы иметь возможность запустить Pro).
Pypy - это совместимая версия python, которая работает в 4-5 раз быстрее, чем CPython («стандартный» python).
Если вы достаточно смелы, чтобы собрать его из исходного кода, есть ветвь, которая «может запускать несколько независимых потоков, нагруженных процессором, в одном и том же процессе параллельно». Это означает, что вы получаете преимущества многопоточности без необходимости переписывать код.
Простой ответ - нет. Лучший ответ, это зависит.
Благодаря реализации CPython (наиболее часто используемого Python) можно с уверенностью предположить, что ваш Python фактически не может использовать преимущества многопоточности. Видеть:
http://en.wikipedia.org/wiki/Global_Interpreter_Lock
https://wiki.python.org/moin/GlobalInterpreterLock
Обратите внимание, что IO невосприимчив к GIL.
Теперь вы можете работать над этим. Как уже отмечали другие, вы можете запускать подпроцессы, и многопроцессорная библиотека может вам помочь.
Я не могу решить проблемы с ArcGIS, но, рассматривая несколько задач с использованием Python, вы рассматривали такой менеджер задач, как Celery (celeryproject.org)? Это потребует от вас определения различных задач обработки, отправки их «менеджеру» для распространения, запуска «рабочих», которые получают задачи от менеджера, обрабатывают их и сообщают о результатах.
Это нетривиально для реализации, но обладает невероятной гибкостью и позволяет в полной мере использовать возможности обработки (т. Е. Использовать эти незанятые ядра).