目前项目中涉及到一些基于 Python 网络编程的工作,前期迫于项目进度,直接用简单 socket 加多线程把需求实现了。但是出于性能优化以及自我提升的需要,希望用一个高性能的框架来重构一下。 不知道有没有前辈指点一下,应该选择哪个框架。进行学习与开发?
1
NaVient 2019-05-22 11:08:51 +08:00
高性能就换 go
|
2
seeusoon 2019-05-22 11:11:12 +08:00 1
能换成 go 么?比你说的这两个都好
非得二选一,那就是 tornado |
4
Philippa 2019-05-22 11:18:13 +08:00 via iPhone 1
两个都很老,二选一推荐 Twisted 比较好,因为很多其他项目也会集成这个框架。但语法比较魔法,还是 async 出来之前的产物,但性能很不错,熟练之后你可以用它来改造你的其他项目。
|
5
crazypig14 2019-05-22 11:28:10 +08:00
我喜欢 flask
|
6
keakon 2019-05-22 11:45:18 +08:00 1
之前我也是 Tornado 的粉丝,不过现在在做的新项目是用 Python 3.7,比较了一番后用了 Starlette。
如果不是做 web 服务,自己拿 asyncio 实现也没几行代码,还有挺多数据库已经支持 asyncio 了。 |
7
youngce OP @crazypig14 flask 属于常规的 WEB 框架了,可能不在这里的讨论范围内?
|
8
BBCCBB 2019-05-22 11:51:01 +08:00
49 年入国军..
建议要么用 asyncio, 要么就 gevent 撑一撑. |
9
Wincer 2019-05-22 11:56:18 +08:00 via Android
asyncio 里是有 socket 的,不过并不兼容标准库里的 socket,但确实是异步非阻塞。如果你一定想要高性能的话,可以试试别人用 cython 写的框架 vibora。
|
10
Trim21 2019-05-22 12:24:51 +08:00
起码也得是基于 asyncio 的吧,twisted 就算了
|
11
crazypig14 2019-05-22 12:40:19 +08:00
@youngce 没仔细看不好意思。。场景压力没那么大的话 twisted 写起来舒服点
|
12
lanshee 2019-05-22 15:23:52 +08:00
试试 sanic????
|
13
warcraft1236 2019-05-22 15:59:34 +08:00
https://github.com/MagicStack/uvloop 最近看到个这个,不知道怎么样
|
14
chenqh 2019-05-22 16:09:32 +08:00
tornado 在 py3 用的就是 asyncio,你们说什么呢
|
15
misaka19000 2019-05-22 16:22:34 +08:00
经验之谈,不要用 Python 写网络相关的东西,异步+协程 会被搞死的,我也建议使用 go 来写,或者 Java 也行
|
16
lolizeppelin 2019-05-22 16:23:53 +08:00
openstack 用的 eventlet,什么 tornado、twisted 的都没用
什么 async 的就算了...除非大量现有库改成 async 的 否则一旦你用到有没有 async 的支持会很蛋痛 eventlet 是不好,但确是目前最可行的方式,网络编程想提升的话,建议你把 eventlet 的代码通读搞懂了 搞懂这个,你会发现所有的协程其实都是一个卵原理 |
17
imkerberos 2019-05-22 16:26:20 +08:00
虽然 async 比较新, 但是现在我还是推荐你用 twisted, 以后你会感谢我.
|
18
zoowii 2019-05-22 16:29:29 +08:00
用 go
|
19
2805408253 2019-05-22 16:30:56 +08:00
15 年的项目用的就是 twisted,挺稳定的。
|
20
2805408253 2019-05-22 16:32:02 +08:00
现在重构的话,我选择 go。坏笑.jpg
|
21
myyou 2019-05-22 17:12:18 +08:00
asyncio 配合 uvloop 可以先用用,性能应该不错
|
22
robot1 2019-05-22 17:25:26 +08:00
twisted 比较齐全,各式各样的都帮你封装好了 推荐 twisted
|
23
keysona 2019-05-22 17:37:09 +08:00 1
我之前维护个公司的几个 tornado 项目。里面坑比较多,但不是不能用。有点微妙。
后来学习了下 asyncio,发现这个更复杂。记得 flask 作者还吐槽过。 之后我换成 go 了。发现这才是我想要的异步。虽然写起来没有 python 那么爽... 最后我决定,涉及到网络编程的一律用 go。 现在公司新开的后端 api 项目首选 go,并且逐步迁移 tornado 项目。 === 非得二选一,还是 tornado 吧。 |
24
scalaer 2019-05-22 17:54:40 +08:00
asyncio 基本库
|
25
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 确实方便啊 |
26
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 高?
|
27
playniuniu 2019-05-23 06:38:11 +08:00 via iPhone
忍痛换 go 吧,后面你会发现比你维护 async 之类的省心太多
|