Python использует только одно ядро ​​одновременно?

13

Недавно я заметил, что Python использует только одно ядро ​​для работы. Есть ли способ, может быть, специальные сборки или команды, чтобы заставить его использовать все ресурсы (второе ядро)?

Махмуд Хагер
источник
1
Если вы запускаете пакетный процесс для повторяющихся задач, и сценарий делает правильные вещи и использует 100% одного ядра для выполнения чего-то полезного, это может быть не так опасно. Запустите второй процесс, который запускает другое ядро ​​также на 100%. Валовый эффект может быть лучше, чем с одним резьбовым процессом. Ситуация отличается, если у вас есть только одна тяжелая задача для обработки.
user30184
Это уже обсуждается, смотрите эту ветку
iRfAn
Сможете ли вы отредактировать свой вопрос, чтобы уточнить, относится ли он к Python вообще или, более конкретно, к ArcPy (на что ссылаются ваши теги), пожалуйста? Если это последнее, можете ли вы включить некоторые детали, чтобы продемонстрировать, что это так, то есть, как вы это заметили?
PolyGeo

Ответы:

15

Вы можете использовать подпроцессы, чтобы использовать преимущества нескольких ядер в скрипте Python, чтобы несколько задач могли выполняться параллельно. Но вы не можете разделить одну задачу на несколько ядер. Подробное объяснение см. В этом FAQ: Поддерживает ли ArcGIS 10 многоядерные процессоры и / или 64-битные операционные системы?

Если вы опытный пользователь Python, вас может заинтересовать подход, описанный в этой пользовательской презентации на Dev Summit 2014, который называется « Параллельная геообработка с использованием методологии многопроцессорной обработки Python и критического пути» , однако он не позволит вам использовать несколько ядер для та же задача.

В противном случае вам придется подождать выхода ArcGIS Pro (полностью 64-битное приложение) в конце этого года, чтобы протестировать работу многопоточности ... (или попробовать бета-версию прямо сейчас)

GISGe
источник
4

Как уже упоминалось, в 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).

Алекс Терешенков
источник
1

Pypy - это совместимая версия python, которая работает в 4-5 раз быстрее, чем CPython («стандартный» python).

Если вы достаточно смелы, чтобы собрать его из исходного кода, есть ветвь, которая «может запускать несколько независимых потоков, нагруженных процессором, в одном и том же процессе параллельно». Это означает, что вы получаете преимущества многопоточности без необходимости переписывать код.

sbell
источник
0

Простой ответ - нет. Лучший ответ, это зависит.

Благодаря реализации CPython (наиболее часто используемого Python) можно с уверенностью предположить, что ваш Python фактически не может использовать преимущества многопоточности. Видеть:

http://en.wikipedia.org/wiki/Global_Interpreter_Lock

https://wiki.python.org/moin/GlobalInterpreterLock

Обратите внимание, что IO невосприимчив к GIL.

Теперь вы можете работать над этим. Как уже отмечали другие, вы можете запускать подпроцессы, и многопроцессорная библиотека может вам помочь.

sellsword
источник
1
Ввод / вывод не застрахован, но так же вызывается большинство функций, реализованных в C, включая большинство инструментов GP и все остальное. GIL - меньшее ограничение в практической среде ГИС, чем можно было бы подумать.
Джейсон Шейрер,
0

Я не могу решить проблемы с ArcGIS, но, рассматривая несколько задач с использованием Python, вы рассматривали такой менеджер задач, как Celery (celeryproject.org)? Это потребует от вас определения различных задач обработки, отправки их «менеджеру» для распространения, запуска «рабочих», которые получают задачи от менеджера, обрабатывают их и сообщают о результатах.

Это нетривиально для реализации, но обладает невероятной гибкостью и позволяет в полной мере использовать возможности обработки (т. Е. Использовать эти незанятые ядра).

Kenh
источник