对asyncio的一些看法
最近经常写的程序主要就是Python, JavaScript, 以及TypeScript了, 用上Python3以及新版本的Tornado之后, 似乎强制被使用了asyncio. 借这篇文章我就讲讲自己对async/await关键字的一些看法. 因为我是普通开发者, 所以这些观点可能比较偏表面.
忘记await
第一个问题是, 在Python中, 调用了async函数时, 可能忘记await, 不只是Python, JavaScript中也有这个现象, 在编码时很容易忽略.
有可能各位细心一些可能不会忘记. 但是假如你忘记了, 代码只有执行到的时候才会报错. 针对这个问题, 尤其建议大家写测试用例, 防止自己因为粗心而丢掉了await.
就我自己感觉而言, 强类型语言更加适合使用async与await, 因为如果你没有await,
编译器会直接给出错误, 例如TypeScript, 我基本没有丢过await
, 因为编译器直接就报错了.
学习与使用成本
作为开发者, 我并不认为async/await
的学习成本低, 我在自己的一篇博客中分享了有关协程以及Asyncio的学习, 你仍然需要了解yield.
而且, 引入了新的关键字后, 几乎需要在async
, 函数的整个调用链上的所有函数都加入async,
考虑到Python的简洁性, 我个人还是不喜欢加入async/await
的.
对于monkey patch
来说, 它复杂的逻辑隐藏的更好, 并且对原代码没有侵入性,
如果能正确的使用, 普通开发者根本不需要担心任何async/await
问题.
总结
对于我接手的业务应该很少会依赖asyncio
, 我也不打算引入.
对于个人项目来说, 我更喜欢golang和TypeScript, 毕竟强类型语言维护起来方便很多.
如果一定要使用asyncio
, 也应该只在特定的库上进行使用.
附录
在搜索时, 我发现Reddit
上也有过相关讨论我该继续使用asyncio还是返回gevent.
![][3]