python-异步

 从我接触python开始就知道这是一门有趣的语言, 它容易上手, 但是却并不容易精通, 甚至大部分接触它的程序员都不能说把这个工具玩的很溜。

我曾经一段时间内纠结python 初级程序员的致命弱点,“因为GIL锁的原因,无法使用多线程实现任务并发”。 这个在如今对性能有一定要求的时代这个是硬伤。

偶然我看到了 fluent python 中的协程和异步的概念, 还有接触go语言中goroutine的概念。我第一次在使用python编写高性能的web后端上面产生了质疑。

为什么我要用这种前人规范的套路。 使用django或者flask编写web业务逻辑, 然后用uwsgi 或者Gunicorn  部署我们的python web 应用。在好点就是用tornado

gevent 这样的东西简单加速我们的web应用?

 1 import asyncio
 2 
 3 async def foo():
 4 
 5     print("业务逻辑")
 6     await asyncio.sleep(0.1)    # 数据库io或者其它网络io
 7     print("构造响应")
 8     return "result"
 9 
10 
11 loop = asyncio.get_event_loop()
12 loop.run_until_complete(foo())

上面的这段代码, 让我看到全新的并发方式。

所有的任务围绕核心的event_loop 来完成, 在单核上, 由event_loop 来调度决定那个协程任务执行。

但是协程任务的yield是由程序员控制的。

换句话说,只要我(程序员)认为, 这段代码是耗时的操作, 我就应该对它进行包装,让它能够异步执行。从而在执行耗时任务的时候,让出cpu给其它任务执行。

哪么, 在异步编程中, 程序员要干的事情就是, 包装(耗时任务), 编写任务流程。

扫描二维码关注公众号,回复: 10314428 查看本文章

猜你喜欢

转载自www.cnblogs.com/deepstack/p/12599801.html
今日推荐