Comments 2
PyByteArray_Resize(PyObject *self, Py_ssize_t requested_size)
Знакомый код.
Вот и вспомнилось сразу, как пришлось костыль делать в проекте FastWSGI. На самом деле при написании кода под WSGI интерфейс возникло очень много вопросов к авторам сия придумки. Довольно затратны процессы сериализации/десериализации.
Сразу вспоминается HTTP-протокол: HTTP 1.x придумали псевдо-программисты, а HTTP 2.x (и далее) - настоящие программисты.
Так вот, одной из проблем WSGI является использование BytesIO. И добавить в поток байтиков можно только Py-объект (для этого используется функция _io_BytesIO_write
).
А функцию для добавления сразу "сырого" куска из памяти (char * bytes
) в CPython не завезли.
И вот пришлось самому конструировать этот механизм вот таким образом: https://github.com/jamesroberts/fastwsgi/blob/5572bb31b859d690be225707b9e7e25af397544b/fastwsgi/pyhacks.c#L148-L154
Хотя много где в CPython есть методы, которые позволяют передавать им "сырые" куски памяти через char *
, но вот в bytesio.c
такие забыли завести.
Вот с чем может быть связана такая забывчивость?
И можно ли было обойтись без костылей, реализованных в pyhacks.c ?
PS.: нагуглил тут похожую проблему и на чистом питоне https://stackoverflow.com/questions/78399639/how-to-use-io-bytesio-in-python-to-write-to-an-existing-buffer
Как работает bytearray в Python? Смотрим реализацию на C