Я создаю научное приложение на Python и рассматриваю использование Amazon EC2 для запуска процесса.
Мое приложение - это как память, так и процессорный голод, и выгода из любых ресурсов, предоставленных ему.
An Extra Large Instance
EC2 дает около 15 ГБ памяти вместе с 8 вычислительными единицами.
Мой вопрос в том, может ли один Python script (при запуске на EC2) использовать все 8 вычислительных единиц? Или я должен запустить 8 независимых процессов, чтобы полностью использовать 8 вычислительных единиц?
Примечание: в случае, если это имеет значение, я планирую использовать экземпляр Linux на EC2.
8 "вычислительных единиц" работают через 4 физических процессора, поэтому простой script сможет использовать только 25% доступной мощности. Тем не менее, модуль Python multiprocessing позволяет вам написать один script, используя несколько процессов, потенциально используя все "вычислительные единицы" ".
Python имеет GIL, что делает его сложным для записи multi- многопоточных приложений, которые полностью используют более одного ядра. Вы можете прочитать об этом здесь Как работают потоки в Python и какие общие Python- потоки конкретных ловушек? или здесь http://www.dabeaz.com/python/UnderstandingGIL.pdf, если вы действительно входите в детали. Я использую только потоки Python, чтобы использовать фоновый режим для различных задач (например, для связи), а не для оптимальной производительности.
Как сказал Джереми, использование многопроцессорного модуля является альтернативным вариантом, или вы можете просто написать свой script, чтобы он работал с независимыми частями ваших данных, а затем запустил, однако, много копий, которые вы предпочитаете.
python
, как мне предоставить всем 8 процессам доступ к одному и тому же куску памяти?
multiprocessing
?