Python використовує лише одне ядро ​​одночасно для роботи?


13

Нещодавно я помітив, що python одночасно використовує лише одне ядро ​​для роботи. Чи є спосіб, можливо, спеціальні збірки або команди, щоб змусити використовувати всі ресурси (другий ядро)?


1
Якщо ви виконуєте пакетний процес для повторних завдань і сценарій робить правильно, і використовує 100% одного ядра для того, щоб зробити щось корисне, це може бути не так небезпечно. Почніть другий процес, який також запустить інше ядро ​​на 100%. Валовий ефект може бути кращим, ніж при одному різьбовому процесі. Ситуація відрізняється, якщо у вас є лише одне важке завдання.
user30184

Про це вже обговорюйте, див. Цю тему для отримання додаткової інформації та рішень gis.stackexchange.com/questions/55048/…
iRfAn

Чи зможете ви відредагувати своє запитання, щоб уточнити, чи йдеться про Python взагалі чи конкретніше про ArcPy (на що натякають ваші теги), будь ласка? Якщо це останнє, чи можете ви включити деякі деталі, щоб продемонструвати, що це так, тобто як ви це помітили?
PolyGeo

Відповіді:


15

Ви можете використовувати підпроцеси, щоб скористатися кількома ядрами в сценарії Python, так що паралельно може працювати кілька завдань. Але ви не можете розділити одну задачу на кілька ядер. Детальне пояснення див. У цьому FAQ: Чи підтримує ArcGIS 10 багатоядерні процесори та / або 64-бітні операційні системи?

Якщо ви досвідчений користувач Python, можливо, вам буде цікавий підхід, пояснений у цій презентації користувача з Dev Summit 2014, що називається Паралельна геопроцесорна робота з методологією багатопроцесорної обробки і критичного шляху Python , все ж це не дозволить вам використовувати кілька ядер для те саме завдання.

Інакше вам доведеться чекати виходу ArcGIS Pro (повністю 64-бітне додаток) пізніше цього року, щоб перевірити, наскільки працює багатопотокова передача ... (або спробуйте Beta прямо зараз)


4

Як уже згадувалося, у ArcGIS Desktop немає підтримки для багатопроцесорної обробки. Говорячи про обробку наборів даних ГІС у настільному середовищі, я намагаюся з’ясувати, чи можу я розділити великий робочий процес на менші шматки, які будуть обчислені при одночасному завантаженні декількох ядер. Майже кожен випадок слід досліджувати індивідуально, оскільки поведінка інструментів загальної практики може суттєво відрізнятися.

Подумайте, що швидше зробити, вирішуючи просту математичну задачу. Який найшвидший спосіб підрахувати всі числа від 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 Beta, щоб надсилати будь-які помилки та мати доступ до облікового запису ArcGIS Online для організацій , щоб мати можливість запустіть Pro).


1

Pypy - сумісна версія python, яка працює в 4-5 разів швидше, ніж CPython ("стандартний" python).

Якщо ви досить сміливі, щоб створити його з джерела, є гілка, яка "може паралельно виконувати декілька незалежних потоків, пов'язаних з процесором, в одному і тому ж процесі". Це означає, що ви отримуєте переваги багатопотокової передачі без необхідності повторного запису коду.


0

Проста відповідь - ні. Краще відповідь - це залежить.

Завдяки реалізації CPython (найбільш часто використовуваного python), можна припустити, що ваш Python насправді не може скористатися багатопотоковою програмою. Побачити:

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

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

Зауважте, що IO несприйнятливий до GIL.

Тепер ви можете попрацювати над цим. Як вже зазначали інші, ви можете нерести підпроцеси, і багатопроцесорна бібліотека може вам допомогти.


1
I / O не захищений, але так називається більшість функцій, реалізованих на C, включаючи більшість інструментів GP та все в ряді. GIL є меншим обмеженням у практичних ГІС-середовищах, ніж можна було б подумати.
Jason Scheirer

0

Я не можу вирішити проблеми ArcGIS, але якщо ви обробляєте кілька завдань за допомогою Python, чи вважали ви менеджером завдань, як Celery (celeryproject.org)? Для цього потрібно визначити різні завдання з обробки, подати їх "менеджеру" для розподілу, запустити "працівників", які отримують завдання від менеджера, обробляють їх та повідомляють про результати.

Це нетривіально для реалізації, але має неймовірну гнучкість і дозволяє повністю скористатися здатністю обробки (тобто використовувати ці простої ядра).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.