博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
高性能python编程之协程
阅读量:5977 次
发布时间:2019-06-20

本文共 1038 字,大约阅读时间需要 3 分钟。

hot3.png

我们都知道并发(不是并行)编程目前有四种方式,多进程,多线程,异步,和协程。

多进程编程在python中有类似C的os.fork,当然还有更高层封装的multiprocessing标准库,在之前写过的python高可用程序设计方法中提供了类似nginx中master process和worker process间信号处理的方式,保证了业务进程的退出可以被主进程感知。
多线程编程python中有Thread和threading,在linux下所谓的线程,实际上是LWP轻量级进程,其在内核中具有和进程相同的调度方式,有关LWP,COW(写时拷贝),fork,vfork,clone等的资料较多,这里不再赘述。
异步在linux下主要有三种实现select,poll,epoll,关于异步不是本文的重点。
说协程肯定要说yield,我们先来看一个例子:http://www.iplaypython.com/module/threading.html

 import timeimport sys# 生产者def produce(l):    i=0    while 1:        if i < 5:            l.append(i)            yield i            i=i+1            time.sleep(1)        else:            return      # 消费者def consume(l):    p = produce(l)    while 1:        try:            p.next()            while len(l) > 0:                print l.pop()        except StopIteration:            sys.exit(0)l = []consume(l)

 

在上面的例子中,当程序执行到produce的yield i时,返回了一个generator,当我们在custom中调用p.next(),程序又返回到produce的yield i继续执行,这样l中又append了元素,然后我们print l.pop(),直到p.next()引发了StopIteration异常。

转载于:https://my.oschina.net/u/1435993/blog/192163

你可能感兴趣的文章
11g RAC集群启动关闭、各种资源检查、配置信息查看汇总。
查看>>
Linux学习笔记<六>
查看>>
Atitit 项目语言的选择 java c#.net php??
查看>>
Java备份Oracle数据库
查看>>
Java图片处理 Thumbnails框架
查看>>
Linux服务器的那些性能参数指标
查看>>
BZOJ 2302: [HAOI2011]Problem c [DP 组合计数]
查看>>
Atitti 过程导向 vs 结果导向 attlax的策
查看>>
mysql主从同步(5)-同步延迟状态考量(seconds_behind_master和pt-heartbea)
查看>>
分布式缓存技术memcached学习系列(三)——memcached内存管理机制
查看>>
PHP 服务端 和 APP 客户端 实现 RSA+AES 双向加密解密
查看>>
PHP随机红包算法
查看>>
python 爬照片 模拟浏览器 先登录账号
查看>>
c++ 11开始语言本身和标准库支持并发编程
查看>>
2017春节~人生智慧箴言
查看>>
.NET Core 之 MSBuild 介绍
查看>>
mongodb概念
查看>>
突破MIME限制上传
查看>>
EF Code First学习笔记:数据库创建
查看>>
终结符、非终结符
查看>>