Производительность сокета C / Python? - PullRequest
10 голосов
/ 15 декабря 2009

мой вопрос просто связан с разницей в производительности между сокетом в C и в Python. Поскольку моя сборка Python - это CPython, я предполагаю, что она похожа, но мне любопытно, есть ли у кого-то действительно «реальные» тесты или хотя бы мнение, основанное на доказательствах.

Моя логика такова:

  • С розеткой намного быстрее? затем напишите C расширение.
  • нет / едва разница? продолжайте писать на Python и выяснить как получить контроль уровня пакета (scapy? dpkt?)

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

Заранее спасибо.

Ответы [ 2 ]

12 голосов
/ 15 декабря 2009

В общем, сокеты в Python работают просто отлично. Например, эталонная реализация сервера отслеживания BitTorrent написана на Python.

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

Однако ваше описание того, что вы хотите сделать, указывает на то, что вы хотите проверить и изменить отдельные IP пакеты . Это выходит за рамки стандартных сетевых библиотек Python и в любом случае является операцией, зависящей от ОС. Вместо того, чтобы спрашивать "что быстрее?" вам нужно будет сначала спросить "это возможно?"

1 голос
/ 15 декабря 2009

Я бы подумал, что C будет быстрее, но Python будет намного проще в управлении и использовании.

разница была бы настолько мала, что вам бы это не понадобилось, если бы вы не пытались отправлять огромное количество данных (что-то глупое, например, 1 миллион ГБ / сек)

Джо

...