Pull to refresh

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

Добрый день! Спасибо за вопрос, очень интересно. Кажется, что нельзя; по крайней мере я сходу не могу придумать.

Sign up to leave a comment.

Articles