tag:blogger.com,1999:blog-824928856526666223.post5210320112310775182..comments2022-11-30T10:25:30.656+02:00Comments on Андрей Светлов: asyncio и HTTPAndrew Svetlovhttp://www.blogger.com/profile/08716418137388253439noreply@blogger.comBlogger9125tag:blogger.com,1999:blog-824928856526666223.post-91456132766632712872014-04-08T16:49:15.483+03:002014-04-08T16:49:15.483+03:00Tornado сильно отличается от WSGI и описанная тобо...Tornado сильно отличается от WSGI и описанная тобой причина -- только одна из многих.<br />aiohttp -- да, допиливать и допиливать. Но вроде бы есть некое видение того, что хочется получить в конце.<br />Остальные существующие для asyncio web либы тоже те еще подарочки.Andrew Svetlovhttps://www.blogger.com/profile/08716418137388253439noreply@blogger.comtag:blogger.com,1999:blog-824928856526666223.post-71113154044483299542014-04-08T10:28:46.312+03:002014-04-08T10:28:46.312+03:00Я немного поработал с Торнадой, и могу сказать что...Я немного поработал с Торнадой, и могу сказать что в ней не wsgi по той причине, что при формировании ответа хэндлер может выбросить исключение или еще как то упасть, поэтому они сначала накапливают вывод, а потом выдают клиенту статус 200 ОК, или не ОК, в зависимости от ситуации.<br /><br />Наверное, для типичного веб-приложения, где просто странички выдаются, это ненужное усложнение, но конкретно в моем проекте, где условно говоря весь сервер обслуживает POST запросы, - это оказалось более чем корректным.<br /><br />Обработка http(s) запросов по умолчанию должна быть синхронная из-за http status code, и если делать ее асинхронной, значит нужен просто промежуточный буфер, где заголовки, код ответа и тело ответа хранится до тех пор пока запрос не будет полностью обработан либо до явного вызова flush.<br /><br />Кстати, быстрый взгляд на aiohttp показал - what? В readme описано что? клиент? Такое впечатление, что оно настолько in development, что надо сильно глубоко вникать.bialixhttps://www.blogger.com/profile/03276301722234350242noreply@blogger.comtag:blogger.com,1999:blog-824928856526666223.post-873845846754295362014-04-06T22:18:15.849+03:002014-04-06T22:18:15.849+03:00Коля, если добавить подержку для Future это и буде...Коля, если добавить подержку для Future это и будет новый стандарт. WSGI 33333 если хочешь.<br /><br />Потому что все WSGI библиотеки (Django, Flask, Pyramid и нет им числа) с Future работать не умеют.<br /><br />Возможно, пока еще не умеют, но тем не менее факт. И сколько там надо будет переписать в коде Django чтобы заработало. О middleware не забывай и о прочем.<br /><br />Может, проще придумать стандарт на asyncio Request/Response (все WSGI библиотеки имеют эти два объекта в том или ином виде) и отойти от WSGI как это сделала tornado?Andrew Svetlovhttps://www.blogger.com/profile/08716418137388253439noreply@blogger.comtag:blogger.com,1999:blog-824928856526666223.post-22224883906716940502014-04-06T21:15:51.952+03:002014-04-06T21:15:51.952+03:00wsgi сервер уже определяет разницу между строкой и...wsgi сервер уже определяет разницу между строкой и итератором, не вижу проблем в том чтобы добавить определение asyncio.Future, <br />думаю это проще чем делать новый стандарт. а потом чем фундаментально asyncio.coroutine отличается от генератора?<br />fafhrd91https://www.blogger.com/profile/04892389913049846307noreply@blogger.comtag:blogger.com,1999:blog-824928856526666223.post-52444029973806656422014-04-06T12:42:31.988+03:002014-04-06T12:42:31.988+03:00Потому что, если отбросить всю шелуху, WSGI это
d...Потому что, если отбросить всю шелуху, WSGI это<br /><br />def app(environ, start_response):<br /> response_headers = [('Content-type', 'text/plain')]<br /> start_response('200 OK', response_headers)<br /> for i in ['a', 'b', 'c']:<br /> yield i<br /><br />Обратите внимание: функция, которая может вернуть строку или итератор. А никак не asyncio.coroutine. В app нельзя сделать yield from redis.get('key'). WSGI сервер этого не поймёт, не обучен по стандарту.<br /><br />А если обучить, то это будет уже не PEP 333/3333.<br /><br />Как-то так.Andrew Svetlovhttps://www.blogger.com/profile/08716418137388253439noreply@blogger.comtag:blogger.com,1999:blog-824928856526666223.post-15711764152580333362014-04-06T07:58:20.854+03:002014-04-06T07:58:20.854+03:00А действительно, почему WSGI не подходит? Он же ит...А действительно, почему WSGI не подходит? Он же итерирумый объект возвращает, что мешает из него читать асинхронно?Oleg Komkovhttps://www.blogger.com/profile/12802650819262803635noreply@blogger.comtag:blogger.com,1999:blog-824928856526666223.post-43526335177541130242014-04-05T20:00:40.555+03:002014-04-05T20:00:40.555+03:00не понятно почему wsgi не подходит? можешь подробн...не понятно почему wsgi не подходит? можешь подробней?fafhrd91https://www.blogger.com/profile/04892389913049846307noreply@blogger.comtag:blogger.com,1999:blog-824928856526666223.post-86245436564922146022014-04-05T15:23:32.499+03:002014-04-05T15:23:32.499+03:00впрочем не исключаю что не совсем эффективно адапт...впрочем не исключаю что не совсем эффективно адаптирвал к asyncio. ну и 10% рвзницы не показатель.kamiramhttp://kamiram.runoreply@blogger.comtag:blogger.com,1999:blog-824928856526666223.post-54544565112970885462014-04-05T15:19:44.593+03:002014-04-05T15:19:44.593+03:00намедни попробовал свой вариант jsonrpc через xmp...намедни попробовал свой вариант jsonrpc через xmpp на asyncio переделать с торнады. всетаки медленее однако.Kamiramhttp://kamiram.runoreply@blogger.com