Многопоточность или многопроцессорность Python?

Поскольку это вопрос дизайна, я не думаю, что код воздаст должное.

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

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

Могу ли я использовать многопроцессорность для активного взаимодействия между процессами или это плохая идея, и я должен придерживаться многопоточности?

Какую реализацию Python вы используете? Если CPython, многопоточность возможна только для почти чисто задач ограничения ввода-вывода из-за GIL. Чтобы распределить фактическую работу между процессорами, вам понадобится многопроцессорность. И данные можно передавать в процессы после создания, предоставляя им объект очереди во время создания, в который вы помещаете данные извне процесса.

Carcigenicate 13.12.2020 23:26

@Carcigenicate просто стандартный python3

user8015732 13.12.2020 23:27

Тогда да, это будет CPython, и вам нужно будет изучить multiprocessing, если вы работаете с данными.

Carcigenicate 13.12.2020 23:28

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

user8015732 13.12.2020 23:34
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
98
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Многопроцессорность и многопоточность — это два разных способа выполнения кода.

В многопроцессорной обработке вы, по сути, просто увеличиваете вычислительную мощность (отсюда и название), поскольку используете больше процессоров.

https://en.wikipedia.org/wiki/Многопроцессорность#:~:text=Многопроцессорность%20является%20%20использованием%20,%20распределения%20задач%20между%20ними.

Многопоточность — это когда ЦП в основном разбивает код на несколько «потоков» кода для одновременного выполнения нескольких задач.

https://en.wikipedia.org/wiki/Multithreading_(computer_architecture)#:~:text=In%20computer%20architecture%2C%20multithreading%20is, поддерживается%20%20%20операционной%20системой.

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

https://timber.io/blog/multiprocessing-vs-multithreading-in-python-what-you-need-to-know/

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

Ответ принят как подходящий

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

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

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

Другие вопросы по теме