Локальное узкое место с питон-сокетами - PullRequest
0 голосов
/ 01 июля 2010

Я отправляю очень большую строку из одного приложения в другое на локальном хосте, используя сокеты в python.Маленькие струны перемещаются мгновенно, но большие струны, кажется, занимают больше времени (я говорю большие, но я говорю, может быть, MB или два в лучшем случае).Достаточно того, что мне придется посидеть и подождать несколько секунд после того, как я что-то сделаю в одном приложении, прежде чем оно появится в другом.

Какие здесь существуют узкие места?Насколько я понимаю, с сокетами на 127.0.0.1 все, что я на самом деле делаю, это перемещаю данные из одной точки памяти в другую.Поэтому передача даже сотен МБ за раз должна мгновенно перемещаться по моей рабочей станции.

1 Ответ

3 голосов
/ 01 июля 2010

Вы по-прежнему перемещаете данные по всему сетевому стеку, а не через саму сетевую карту.

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

Вот обзор высокого уровня: http://docs.python.org/howto/sockets.html

PS: Не уверен, что это будет работать для вашего случая, но в многопроцессорном модуле есть несколько способов обмена данными между несколькими процессами вэффективный способ.

PPS: Вы можете попробовать использовать сокет UDP вместо сокета TCP.Это потенциально может дать вам лучшую пропускную способность и кардинально не изменить ваш метод IPC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...