Python 协程的应用场景

2019-04-12 19:23:30 +08:00
 a523

我掌握了 Python 的多线程编程, 也知道多进程 然而还有一个协程,也去学习了下, 也掌握一点协程的写法。 但是? Python 的协程的应用场景是? 一般的并发场景不都用线程,进程就解决了吗?我目前想不到什么场景适合用 Python 的协程比较好? 个人经验是用线程用的比较多,用在给不同主机批量发网络请求上。

4458 次点击
所在节点    Python
11 条回复
dobelee
2019-04-12 19:33:32 +08:00
只看功能不看性能系列?
ipwx
2019-04-12 19:33:55 +08:00
1、协程比线程、进程处理 Network IO 要高效的多。也许可以 handle 高出一个数量级的客户端链接,不过我没有这方面的资料。
2、Python 的多线程基本是废的,因为 GIL 的存在,所以只能用协程。
mseasons
2019-04-13 09:20:28 +08:00
@ipwx 多线程可以用作 IO 密集的程序里
Eds1995
2019-04-13 09:25:48 +08:00
去看[faust]( https://github.com/robinhood/faust)源码,个人觉得是 python 里面用 asyncio 最完美的
Eds1995
2019-04-13 09:26:45 +08:00
676529483
2019-04-13 11:06:37 +08:00
@ipwx 多线程在遇到 io 阻塞时,会释放 GIL,也不算完全费,只是达不到其他语言线程的效率
fghjghf
2019-04-13 15:06:21 +08:00
协程这玩意没啥用,线程的瓶颈就是他都瓶颈。他和线程都区别就是,线程都调度看系统,协程你可以自己控制。yield 就可以实现了
keepeye
2019-04-13 16:36:28 +08:00
最常见的应用就是 web 服务器吧,比如 tornado

我自己的话有一个场景,每个登录用户定时拉取外部信息的需求,如果每个用户开一个线程开销太大,所以就用协程还是很方便的
lowman
2019-04-16 11:39:16 +08:00
@mseasons python 的多线程基本是废的? 个人觉得有待商榷, 这里是否应该分场景讨论更合适, IO 密集型的任务使用 Python 的多线程去处理, 应该是可以实现多任务的, 一刀切应该并不合适
mseasons
2019-04-16 13:44:25 +08:00
@lowman 你艾特错了呀……不是我说的
jesnridy
2019-04-18 14:54:09 +08:00
对于网络 IO 用协程处理不是美滋滋

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

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

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

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

© 2021 V2EX