Многопроцессорная обработка Python - как сделать ее более эффективной

У разработчиков ASP.NET есть выбор этого удобного встроенного (MS JS должен быть включен в страницу):

var date = Date.parseLocale('20-Mar-2012', 'dd-MMM-yyyy');

http://msdn.microsoft.com/ru -us / библиотека / bb397521% 28v =% против 100 29.aspx [/ д2]

1
задан Mike Borkland 17 March 2019 в 20:54
поделиться

1 ответ

Я неправильно использую многопроцессорную библиотеку Python?

Неверно? Нет. Неэффективно? Да.

Помните, что многопроцессорная обработка создает совместимые, но в остальном независимые экземпляры Python. Думайте о них как о работниках на фабрике или о друзьях, работающих на большой работе.

Если только один человек работает над проектом, то один человек может свободно передвигаться по заводскому цеху, подбирать инструмент, использовать его, опускать, перемещать куда-то еще, поднимать следующий инструмент и так далее. Добавьте второго человека - или, что еще хуже, больше людей, возможно, даже сотни людей, - и этот человек должен теперь координировать: если какая-то область является общей, или какой-то инструмент используется, Боб не может просто взять что-то, он должен попросить Алису сначала, если она с этим покончила.

Объект Manager - это общая оболочка многопроцессорной обработки Python для совместного использования. Помещение переменных в Manager Namespace означает , что они являются общими, поэтому автоматически проверяйте их, прежде чем использовать их . (Точнее, они хранятся в одном месте - в одном процессе - и доступны или изменены из других через прокси.)

Здесь вы сделали метафорический эквивалент замены: «Боб: считайте так быстро, как можете» "с" Боб: постоянно прерывать Алису, чтобы спросить, считает ли она, затем считать; Алиса: считать, но постоянно прерываться Бобом. " Боб и Алиса теперь проводят большую часть своего времени, разговаривая друг с другом, а не считая.

Как указано в , в документации говорится :

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

(начинается с фразы «как упомянуто выше», но выше не упоминается!).

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

0
ответ дан torek 17 March 2019 в 20:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: