<p>aiohttp 3.0 发布</p>

创建于 2017-10-18  ·  62评论  ·  资料来源: aio-libs/aiohttp

我想命名下一个版本 3.0
3.0 表示专业。

让我们放弃 Python 3.4 并在任何地方使用async/await
另一个重要的问题是 3.5 版本要切断什么?

老实说,我只想支持3.5.3+ :该版本修复了asyncio.get_event_loop()众所周知的丑陋错误。
Debian stable 附带 Python 3.5.3,不确定 RHEL。
具有更快发布周期的所有其他发行版也至少支持 3.5.3 或事件 3.6。

过渡不应立即完成。

  1. 让我们首先在setup.py中固定所需的最低 Python 版本。
  2. 翻译测试套件以使用async/await
  3. 修改 aiohttp 本身以使用新语法。

除了第一个项目之外,每个项目符号都可以在一系列 PR 中逐个部分地完成。

最后顺便说一句,我希望能获得轻微的性能提升:)

meta outdated

最有用的评论

async/await无处不在。 :香槟::烟花:

所有62条评论

async/await无处不在。 :香槟::烟花:

我认为在 3.0 时最好放弃 3.5 的支持。

+1

我们应该放弃所有的掠夺。 将 websocket 的响应写入方法和发送方法转换为真正的协程

@kxepal我们可以通过删除 3.5 来简化什么?

@kxepal我们可以通过删除 3.5 来简化什么?

  • 只需 3.6,异步生成器就更简单了
  • f-strings 可以使格式化的字符串更干净
  • 关于支持哪个 3.5 补丁,哪个不支持的混淆更少。 只需“>=3.6”。

我猜是Debian,我不知道它什么时候会升级到3.6。

我们应该放弃所有的弃用。 将 websocket 的响应写入方法和发送方法转换为真正的协程

+100。 但是让我们小心丢弃所有东西。 让我们一一查看每个弃用。
当然,例如,我们对旧式中间件有弃用警告。
在引入后仅两个月就取消对这些中间件的支持太粗鲁了。

关于旧中间件:我同意必须保留更长时间。

@samuelcolvin
我想知道我们是否应该将 Linux 发行版之一算作我们的终结者。 到目前为止,我们不针对任何特定的 Linux 发行版支持 AFAIK。

@samuelcolvin @kxepal我很想放弃 3.5,但我们的主要下游之一是https://home-assistant.io/
@balloob要求我保持 3.4 支持,直到 RaspberryPi 默认拥有 3.5 电池。
它们依赖于 Debian。 我希望它完成了。

aiohttp 2.3 等待了很长时间(我们遇到了安全问题等),我希望在年底发布 3.0。

@asvetlov
保留 2.3.x 版本并支持 3.4 和 3.5,而放弃 3.0 怎么样? IIRC 对于此类情况,我们有一些 LTS 政策。

我担心试图让每个人都满意会让我们在适应新功能方面变得缓慢。

@asvetlov
我说的是引入 <= 2.0 的弃用,我们应该保留从 2.3 开始的弃用。

@kxepal
3.5 不会像 3.4 那样使代码向后不兼容,
我们仍然可以实现异步生成器,只是 3.5 不支持它们

-1 下降 3.5

big -1 用于拆分发布分支。

由于 3.7 即将推出3.5.3+听起来很合理,但完全放弃 3.5 可能对 home-assistant.io 的人来说是个大问题。

好的,不是今天,3.5,不是今天(:

PS 可能是题外话,但是为什么 home-asistant.io 迁移到 3.6 会有这么大的问题?

据我所知,home-asistant.io 应用程序在 ruspberipi 上运行,并由一群普通爱好者使用,而不是软件工程师。 准备好 debian python 环境为他们简化了很多事情。

Home Assistant 刚刚宣布我们将弃用 Python 3.4 支持。 我们计划在 2018 年初停止对它的支持。

-1 也用于在此处删除 Python 3.5。 我认为遵循 Debian stable 是一个很好的指导方针。

我很乐意做出贡献。 马上开始。

你会考虑为 PR 创建一个新的分支吗?

@eteamin不需要新的分支,只需对 master 进行 PR。
我已经为错误修复创建了 2.3 顺便说一句。

好吧,剩下的问题是最小的 3.5 支持版本。
3.5.0、3.5.1 和 3.5.2 是否有反对意见?
aiohttp 将适用于 Python 3.5.3+

我还没有看过 3.5 的不同版本。 但是,如果我们遵循 Debian 稳定版,Python 3.5.3 似乎是要走的路👍

关键区别是固定的asyncio.get_event_loop() :如果从协程调用,该方法将返回当前循环。
在它总是返回asyncio,set_event_loop()调用设置的循环之前。

在 3.5.2 中,异步迭代器协议已更改: __aiter__不再是协程。

还有像loop.create_future()loop.create_task()这样的小而愉快的变化。

我以为loop.create_task是 3.7

不, https://docs.python.org/3/library/asyncio-eventloop.html#tasks
对于 3.7 ,@1st1计划添加asynsio.create_task()asyncio.create_future()asyncio.run_in_executor()等调用。

顺便说一句, @1st1你需要帮助吗? Python 3.7 来了,我有空;)

@asvetlov听着,如果你有时间,你能完成这张票吗? https://github.com/python/cpython/pull/528#issuecomment-335862442

哦,我现在想起来了。 大约是current_task

2017 年 10 月 19 日上午 10:27,Andrew Svetlov [email protected]写道:

不, https://docs.python.org/3/library/asyncio-eventloop.html#tasks
对于 3.8 ,@1st1计划添加诸如 asyncio.create_task() 和 asyncio.create_future()m asyncio.run_in_executor() 等调用。

顺便说一句, @1st1你需要帮助吗? Python 3.7 来了,我有空;)


您收到此消息是因为您发表了评论。
直接回复此电子邮件,在 GitHub 上查看它,或将线程静音。

顺便说一句, @1st1你需要帮助吗? Python 3.7 来了,我有空;)

我与 Guido 讨论了其中的一些内容,在继续前进之前,我需要考虑一些事情。 我会在一两个星期内通知你。

@1st1谢谢

@fafhrd91 我明天去看看

@fafhrd91你同意 aiohttp 3.0 支持 python 3.5.3+ 吗?
目前在 master 分支中被切断的是 Python 3.5.0。
我喜欢loop.create_future() / loop.create_task() ,特别是修复asyncio.get_event_loop()行为。

感谢贡献者迁移到async/await语法。
这项任务微不足道,但很耗时。 我非常感谢您的帮助。
也许你也会看看#2395? 对于新手来说,文档比源代码更重要,请帮助他们。

我认为 python3.5.3 是有道理的。

Ubuntu LTS 16.04 仅支持 Python 3.5.2。
老实说,我不在乎:人们可以通过https://launchpad.net/~fkrull/+archive/ubuntu/deadsnakes PPA 在其上安装 Python 3.6
新的 LTS 版本预计在 2018 年 4 月发布。

我认为这很好。 人们开始迁移到 aiohttp 3.0 需要时间,到那时下一个 Lts 应该可用

好的。 通过这条评论,我们最终决定在 aiohttp 3.0 中支持 Python 3.5.3+。
留下它只是为了注意:)

这个里程碑有很多想法 [1],它们都是必须的,还是有一些不错的? 最好有一个列表,列出一些仍然悬而未决且必须解决的问题的优先级
.

[1] https://github.com/aio-libs/aiohttp/milestone/17

一切都是愿望清单。
它是开源的,人们致力于他们想要/喜欢的功能。
发布日期未定,开发处于免费模式。
在宣布预计发布日期后,拦截器列表将显示为即将发布。

让我们发布。
更新日志很长,主人很稳定。
修复了许多错误。
我们可以在 3.1 之后处理所有未决问题

🎉🎉🎉

🚢📦!

:火箭:

在实际发布之前有一个重大更改列表和一个预发布标签会很好。 这将更容易确保支持包在发布之日支持 3.0。

也许我们还应该有一个我们希望在发布之日兼容的软件包列表?
只是粗略的猜测:

  • aiohttp 会话
  • aiohttp-jinja
  • aiohttp-devtools

多一点,少一点?

Beta 标记正在构建中: https ://pypi.python.org/pypi/aiohttp/3.0.0b0
Jinja 和 session 应该可以正常工作(我相信)。
对于 devtools,最好打开应用程序运行器以启动调试应用程序。

towncrier --draft run 会生成粗略的重大更改列表。
我将在文档中创建一个单独的页面,其中包含从 2.x 迁移到 3.0 的说明

对于 devtools,最好打开应用程序运行器以启动调试应用程序。

你能解释一下吗?

此外https://pypi.python.org/pypi/aiohttp/3.0.0b0自 2.3.10 以来未显示更改

您不再需要app.make_handler()app._init_loop() (但仍然支持它)。
此处描述了新方法: https: //docs.aiohttp.org/en/latest/web_advanced.html#application -runners

不,我还没有为 3.0 生成变更日志,很快就会连同迁移文档一起生成。

linux wheel builder作业卡住了https://travis-ci.org/aio-libs/aiohttp/jobs/338922307#L882。 任何人都可以在本地机器上的docker中测试这个吗?

调查

好消息,同意让我们迈出第一步。 我们可以用其他位迭代
在次要版本中。

在我的积压工作中,我至少有两件待处理的事情。

$ tools/run_docker.sh aiohttp
...
io/tests/test_websocket_writer.py ...........                            [ 97%]
io/tests/test_worker.py ............................................

这也发生在我的笔记本电脑上。

@asvetlov至少将这个轮子构建作业添加到 cron 运行以进行健全性测试(当然不包括部署)看起来是一个理智的想法

听起来不错,尤其是如果您自己设置一切:)

这并不难:只涉及一点复制粘贴:)

一切都完成了。
https://pypi.python.org/pypi/aiohttp/3.0.0b4可用于测试。
如果没有人报告问题,我将在明天发布

你应该再待几天

周一?

周一不错,周末可以考

aiohttp-devtools 已准备好在 aiohttp 发布后立即发布新版本,需要大量重写才能在协程而不是多个进程中使用AppRunner

凉爽的!
检查 aiohttp-jinja2 和 aiohttp-session,它们不需要更改。

发布已出

该线程已被自动锁定,因为它关闭后没有任何最近的活动。 请为相关错误打开一个 [新问题]。
如果您觉得在此讨论中提出了重要观点,请将这些摘录包含在该 [新问题] 中。

此页面是否有帮助?
0 / 5 - 0 等级