Форум сайта python.su
Согласен, говорит…, но всё равно бесполезно )).
Задача довольно распространенная - работа с сокетами. Должен быть эффективный способ.
Отредактировано (Июнь 19, 2008 17:32:33)
Офлайн
А ты у своего StringIO после каждого write getvalue не бери. Не сложно считать длину накопившегося буфера отдельно.
Дальше. Пример непоказательный. Если у тебя обычно пакет за два раза приходит - используй специфический для этого случая алгоритм. Если пакет довольно большой - StringIO ощутимо выигрывает.
И вообще, если переаллокация так сильно бьет по производительности - может стоит от нее совсем отказаться. Использовать внутри chunks, а снаружи можно выглядеть непрерывным куском (впрочем, это сильно зависит от отсобенностей обрабатывающего алгоритма. Если потоковый - вообще может все отлично лечь).
Далее. Если говорить о сокетах - использовать socket.recv_into никто не пытался?
Кажется, задачу решают не с того конца….
Офлайн
Андрей СветловКак обычно…
Кажется, задачу решают не с того конца….
Офлайн
Андрей СветловБуду копать в этом направлении. Кстати, что можно по этому поводу почитать?
chunks, socket.recv_into
Офлайн
Офлайн
FerromanК сожалению, полноценной информации по этим функциям найти не удалось. Много ссылок, но мало примеров и описаний.
Офлайн
Вот нашел похожий тест по способам быстрой конкатенации строк.
http://www.skymind.com/~ocrow/python_string/
Офлайн
Нашел в тестинге питона пример использования recv_into, recvfrom_into
buf = array.array('c', ' '*1024)
nbytes, addr = self.cli_conn.recvfrom_into(buf)
msg = buf.tostring()[:LENGHT_MSG]
dict[`sock`]=[]
o=dict[`sock`]
o.append(array.array('c','\x00'*1024))
recv_into(o[0],1024)
Отредактировано (Июнь 23, 2008 18:45:50)
Офлайн