Python & Amazon EC2 - использовать все вычислительные устройства?

1

Я создаю научное приложение на Python и рассматриваю использование Amazon EC2 для запуска процесса.

Мое приложение - это как память, так и процессорный голод, и выгода из любых ресурсов, предоставленных ему.

An Extra Large Instance EC2 дает около 15 ГБ памяти вместе с 8 вычислительными единицами.

Мой вопрос в том, может ли один Python script (при запуске на EC2) использовать все 8 вычислительных единиц? Или я должен запустить 8 независимых процессов, чтобы полностью использовать 8 вычислительных единиц?

Примечание: в случае, если это имеет значение, я планирую использовать экземпляр Linux на EC2.

Теги:
amazon-ec2

2 ответа

3
Лучший ответ

8 "вычислительных единиц" работают через 4 физических процессора, поэтому простой script сможет использовать только 25% доступной мощности. Тем не менее, модуль Python multiprocessing позволяет вам написать один script, используя несколько процессов, потенциально используя все "вычислительные единицы" ".

  • 0
    @ Джереми Бэнкс: спасибо. Мое приложение требует, чтобы все «вилки» - при выполнении своих собственных задач - взаимодействовали / манипулировали одним и тем же фрагментом памяти. Возможно ли это при использовании multiprocessing ?
  • 0
    Существует API для взаимодействия между процессами или с использованием общей памяти. Прочитайте docs.python.org/library/multiprocessing.html
Показать ещё 5 комментариев
4

Python имеет GIL, что делает его сложным для записи multi- многопоточных приложений, которые полностью используют более одного ядра. Вы можете прочитать об этом здесь Как работают потоки в Python и какие общие Python- потоки конкретных ловушек? или здесь http://www.dabeaz.com/python/UnderstandingGIL.pdf, если вы действительно входите в детали. Я использую только потоки Python, чтобы использовать фоновый режим для различных задач (например, для связи), а не для оптимальной производительности.

Как сказал Джереми, использование многопроцессорного модуля является альтернативным вариантом, или вы можете просто написать свой script, чтобы он работал с независимыми частями ваших данных, а затем запустил, однако, много копий, которые вы предпочитаете.

  • 0
    благодарю вас. Похоже, что лучше запускать 8 разных процессов, каждый из которых взаимодействует с разными частями данных. Это отлично. Тем не менее, все они должны будут совместно использовать / обновлять один и тот же кусок памяти. В python , как мне предоставить всем 8 процессам доступ к одному и тому же куску памяти?
  • 0
    «Сложно писать многопоточные приложения, в которых полностью используется более одного ядра». Чтобы пояснить, легко писать многопроцессорные сценарии и, как правило, нецелесообразно писать многопоточные сценарии.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню