Python 网络编程框架 tornado 还是 twisted?

2019-05-22 11:06:35 +08:00
 youngce

目前项目中涉及到一些基于 Python 网络编程的工作,前期迫于项目进度,直接用简单 socket 加多线程把需求实现了。但是出于性能优化以及自我提升的需要,希望用一个高性能的框架来重构一下。 不知道有没有前辈指点一下,应该选择哪个框架。进行学习与开发?

5063 次点击
所在节点    Python
28 条回复
myyou
2019-05-22 17:12:18 +08:00
asyncio 配合 uvloop 可以先用用,性能应该不错
robot1
2019-05-22 17:25:26 +08:00
twisted 比较齐全,各式各样的都帮你封装好了 推荐 twisted
keysona
2019-05-22 17:37:09 +08:00
我之前维护个公司的几个 tornado 项目。里面坑比较多,但不是不能用。有点微妙。

后来学习了下 asyncio,发现这个更复杂。记得 flask 作者还吐槽过。

之后我换成 go 了。发现这才是我想要的异步。虽然写起来没有 python 那么爽...

最后我决定,涉及到网络编程的一律用 go。

现在公司新开的后端 api 项目首选 go,并且逐步迁移 tornado 项目。

===

非得二选一,还是 tornado 吧。
scalaer
2019-05-22 17:54:40 +08:00
asyncio 基本库
sujin190
2019-05-22 17:55:25 +08:00
从性能上看 tornado 和 twisted 差不多,好处是 twisted 实现的网络协议很多,没特殊要求我还是支持 tornado,感觉对 async await 支持更方便

asyncio 性能看似更好一些,但是其实只有 protocol,不过在 async reader 和 writer 的情况下,其实也差不多,不过不得不说 tornado 的 iostream 的实现过于复杂了,极大的拉低了性能

自己也实现过一个简单的,https://github.com/snower/sevent 差不多有 asyncio 三倍的网络性能,协议解析简单代理转发类的服务还不错

认真说还是 asyncio 吧,async 配合 await 还是比较容易写的,其实 go 的开发效率感觉还是低一些,没什么几万几十万并发的,性能啥的完全不是问题,感觉没啥特别必要,但是 go 确实方便啊
thechosenone
2019-05-22 19:31:17 +08:00
twisted 了解不多但似乎比 tornado 更古老,tornado 前几年发展缓慢一直是因为考虑兼容 py2 和 3 的问题,而主力维护者现在只有一个了,但是 tornado 从 5 之后(大概)只支持 3 了,现在 tornado 的版本更迭是非常快的,而且你在 github 提 issue 开发者回答是很快的,再加上国内公司用 twisted 的更少,作为 python 框架中原生支持异步网络,我认为 tornado 是一个很好的选择,至于又有人说什么 go 的,都是瞎 jb 提,怎么不叫楼主学 c ?不学 rust ?性能不必 go 高?
playniuniu
2019-05-23 06:38:11 +08:00
忍痛换 go 吧,后面你会发现比你维护 async 之类的省心太多
zvall
2019-05-28 18:43:57 +08:00
@chenqh 是你用不好 python 吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/566492

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX