谷歌使用Grumpy解决CPython的并发问题

谷歌通过使用Go语言创建了一个新的Python运行时,解决了CPython中全局解释器锁(Global Interpreter Lock)导致的并发局限。

谷歌的YouTube前端和API使用Python开发,运行在CPython 2.7之上,CPython 2.7是Python解释器的参考实现。这些年来,Python代码已经增长到数百万行了,在经过对运行时进行性能调整之后一般表现良好。但是他们碰到了一个再三出现的问题。据谷歌透露:“并发负载在CPython上的表现并不好。”

在研究了许多其他可能的解决方案后,谷歌决定尝试在Go的运行时上面运行Python代码,因为它对并发性的强大支持。于是Grumpy项目诞生了。Grumpy可以将Python代码转换为Go源代码,然后将其编译为目标平台的本地代码。Go中间代码是一系列应用在Python对象数据结构上的操作。

因为它使用了编译,Grumpy牺牲了解释型语言所具有的一些的开发自由度和特性。但谷歌声称,静态分析带来了性能上的优化,通过简单的导入就可以使用Go的包,这两项好处弥补了上述的不足。

静态编译的另一个结果是Grumpy不支持并且将“可能永远不支持”CPython中可用的一些动态功能:exec、eval和compile,因为支持它们将需要“使用笨重而低效的编译工具链构建Grumpy程序”。虽然理论上可能,但是Grumpy团队表示,他们也不打算支持C扩展模块,因为“Grumpy的API和对象布局与CPython不同”。

Google试图用Grumpy替代CPython 2.7。有些人希望看到Grumpy在未来支持Python 3.x。在回答有关支持Python 3的问题时,YouTube的高级软件工程师Dylan Trotter说:“我们有一个大的Python 2.7代码库,所以这是我们一直关注的。我肯定想支持Python 3。”他还在另一个帖子中说,“近期没有Python 3的具体计划,但长期来说我肯定想要支持它。”

Google基于Apache 2.0许可在GitHub上开源Grumpy,邀请开发人员评论和贡献。 还为此设立了一个论坛。

本文转自d1net(转载)

时间: 2024-11-16 03:53:20

谷歌使用Grumpy解决CPython的并发问题的相关文章

win7无法安装谷歌地球如何解决?

win7无法安装谷歌地球如何解决?   1.IP配置的问题,电脑连接不上谷歌地球服务器,需要我们修改一下hosts文件,文件路径是c:WINDOWSsystem32 driversetc,用记事本把hosts打开,把203.208.46.30 kh.google.com另起一行,加在最后面就可以啦.保存hosts文件即可; 2.谷歌地球打不开还有一种可能是缓存文件太大,因为谷歌地球本来文件就很大,尤其是在你看了很多地方以后,会产生大量的地图图片文件,巨大的缓存,需要清理缓存文件即可.可以使用安全

解决Java多线程并发的计数器问题

问题描述 解决Java多线程并发的计数器问题 3C public class Counter { public static int count = 0; public synchronized static void inc() { count++; } public static void main(String[] args) { //同时启动1000个线程,去进行i++计算,看看实际结果 for (int i = 0; i < 1000; i++) { new Thread(new Ru

如何解决网站大规模并发访问带来的性能下降问题

摘要: 再过半个月就2013年的春运就要来临,每年外地打工的人们都会因为订票而烦恼.特别是网上订票,对12306提供给的网上订票系统会有各种看法,从去年的年春节,铁道部推出12306网站, 再过半个月就2013年的春运就要来临,每年外地打工的人们都会因为订票而烦恼.特别是网上订票,对12306提供给的网上订票系统会有各种看法,从去年的年春节,铁道部推出12306网站,实行网络实名购票,每一个返乡人原以为能买着一张回家的火车票,但结果还是大失所望.在去年,7天内,12306网站访问用户已占全球互联

如何解决php中并发读写文件冲突的问题

对于日IP不高或者说并发数不是很大的应用,一般不用考虑这些!用一般的文件操作方法完全没有问题.但如果并发高,在我们对文件进行读写操作时,很有可能多个进程对进一文件进行操作,如果这时不对文件的访问进行相应的独占,就容易造成数据丢失. 例如:一个在线聊天室(这里假定把聊天内容写入文件),在同一时刻,用户A和用户B都要操作数据保存文件,首先是A打开了文件,然后更新里面的数据,但这里B也正好也打开了同一个文件,也准备更新里面的数据.当A把写好的文件保存时,这里其实B已经打开了文件.但当B再把文件保存回去

新解决SQL Server并发的方法

您可以在优化数据库查询,升级数据库服务器,但仍不足以保证应用程序良好的数据库性能.这是因为问题可能产生于系统中并发(指同步)地执行查询操作.实际上,在产品化的数据库系统中,同步执行查询可能引发的问题是再多的查询优化也不能解决的.我们可以有最优化的.执行最快的查询,但是,如果这些查询因为并发问题得不到需要的数据,说明优化工作还做得不够充分. 从根本上讲,我们必须保证数据库查询和执行查询的连接必须能够在并发执行中没有错误(如死锁或更新冲突),并能在可接受的等待时间内得到结果.如果不能做到,就要定位并

利用redis + lua解决抢红包高并发的问题

抢红包的需求分析 抢红包的场景有点像秒杀,但是要比秒杀简单点. 因为秒杀通常要和库存相关.而抢红包则可以允许有些红包没有被抢到,因为发红包的人不会有损失,没抢完的钱再退回给发红包的人即可. 另外像小米这样的抢购也要比淘宝的要简单,也是因为像小米这样是一个公司的,如果有少量没有抢到,则下次再抢,人工修复下数据是很简单的事.而像淘宝这么多商品,要是每一个都存在着修复数据的风险,那如果出故障了则很麻烦. 淘宝的专家丁奇有个文章有写到淘宝是如何应对秒杀的:<秒杀场景下MySQL的低效–原因和改进> h

Apache Spark技术实战(四)spark-submit常见问题及其解决 &amp;CassandraRDD高并发数据读取实现剖析

<一>spark-submit常见问题及其解决 概要 编写了独立运行的Spark Application之后,需要将其提交到Spark Cluster中运行,一般会采用spark-submit来进行应用的提交,在使用spark-submit的过程中,有哪些事情需要注意的呢? 本文试就此做一个小小的总结. spark-defaults.conf Spark-defaults.conf的作用范围要搞清楚,编辑driver所在机器上的spark-defaults.conf,该文件会影响 到drive

【Itext】解决Itext5大并发大数据量下输出PDF发生内存溢出outofmemery异常

  尼玛,这个问题干扰了我两个星期!!   关键字 itext5 outofmemery 内存溢出 大数据 高并发 多线程 pdf 导出 报表 itext 并发   在读<<iText in Action 2nd>4.3节(Dealing with large tables)的时候,书上写道:itext5PdfPTable实现了ILargElement的接口,只需要我们手动设置datatable.setComplete(false);之后,它就可以自动将表格元素输出到document中,

详解利用redis + lua解决抢红包高并发的问题_Redis

抢红包的需求分析 抢红包的场景有点像秒杀,但是要比秒杀简单点. 因为秒杀通常要和库存相关.而抢红包则可以允许有些红包没有被抢到,因为发红包的人不会有损失,没抢完的钱再退回给发红包的人即可. 另外像小米这样的抢购也要比淘宝的要简单,也是因为像小米这样是一个公司的,如果有少量没有抢到,则下次再抢,人工修复下数据是很简单的事.而像淘宝这么多商品,要是每一个都存在着修复数据的风险,那如果出故障了则很麻烦. 基于redis的抢红包方案 下面介绍一种基于Redis的抢红包方案. 把原始的红包称为大红包,拆分