中企动力 > 头条 > 关于python

网站性能检测评分

注:本网站页面html检测工具扫描网站中存在的基本问题,仅供参考。

关于python

关于 Python 多线程的一些思考 企业视频课程

img

非笑

关注

导语

在知乎等地方经常看到有人问,Python 的多线程是不是鸡肋?为何我用多线程性能一点没有提升,有时候性能反而下降?在这里通过日常工作中遇到的问题以及自己的一些总结,来一探 Python 多线程究竟是不是鸡肋;如果不是,那又该如何使用。

1、遇到的问题

工作中常用到 python 来分析文件,统计数据;随着业务的发展,原先的代码性能受到了一定的挑战,下面根据两个案例来讲解在 python 的使用过程中,遇到的一些问题,以及自己的一些总结。

案例一:数据统计,将文件按照一定的逻辑统计汇总后,入库到本地 db 中。

最开始的代码流程框图:

python

大概流程:

1、循环读文件,按照一定格式将文本进行拆分计算;

2、根据指定的 key 来统一汇总数据;

3、入库本地 DB,入库时,会先查找 db 中是否存在这条记录,然后再判断是否插入 db 中;相当于这里会有两次 db 操作,一次查询,一次写入。

一开始业务量小,db 数据量少,整个流程耗时较短,在秒级能够完成,随着业务发展,所需时间也有秒级变成了分钟级,十分钟级别等。

测试 1

通过对其中的一个业务某天的数据进行测试,它的耗时主要分部为,读文件(文件大小 1G 左右)耗时 2 秒,逻辑计算及汇总 58s,数据入库 32s;总耗时大概在 1 分半钟。

1.1 方案一

流水线形式的多线程

python

线程1负责读取数据,然后通过 python 自带的 Qeueue,Q1 传递数据给线程 2;

线程 2 负责逻辑计算,然后通过 Q2 传递数据给线程 3;

线程 3 负责汇总数据,然后通过 Q3 传递数据给线程 4;

线程 4 则入库数据;

这个方案在实现之后立马就被废弃了,它的效率比单进程的效率低很多,通过查看系统调用之后,发现是因为多个线程一直在竞争锁,以及线程切换导致其执行效率还不如单线程。

1.2 方案二

数据分片分段多线程

在不同的时机采用多线程来处理,同时尽量避免多线程对同一资源进行竞争,以减少锁的切换带来的消耗。因此这里在逻辑计算和数据入库阶段分别采用数据分组,多线程执行的方式来进行处理。

分段一、逻辑计算和汇总,将内存读到内存中后,按照线程数量,将数据切分成多块,让第 i 个线程 thread[i]处理第 i 份数据 data[i],最后再将计算得到的 4 份数据汇总,按照相同的 key 进行汇总;得到 sum_data。

分段二、将 sumdata 按照线程数量,切分成多份,同样让 thread[i]处理 sumdata[i]的数据,让他们各自进行数据的查询以及写入操作。

python

测试 2

对同一个文件进行测试,读文件耗时 2 秒,逻辑计算及汇总 62s,数据入库 10s;总耗时大概在 70 多秒,相比最开始的单线程,时间大概下降了 20 多 s;但可以看出,逻辑计算的时间相比单线程确增加了不少,而入库操作的时间减少了 20 多 s;这里就引发一个问题,逻辑计算跟入库的差异在哪里?为何前面的多线程性能下降,而后面性能确大幅度提高。

这里的原因究竟为何?

案例二

案例 2 的整体流程为,将几份不同的数据源从 db 中取出来,按天取出,经过一定的整合后,汇总插入到一个目标 db 中。

一开始的代码流程:

python

同样最初的时候,需要整合的数据量较少,db 中的数据量也较少。随着业务增长,每天需要处理的数据量也逐渐增加,并且 db 中的数据量也越来越大,处理的时间也从开始的秒级别也逐渐增加到分钟级别,每次都是统一处理一个月的数据,整体耗时需要几个小时。

测试 3

对某天的数据进行测试,结果为:取数据 整合 耗时 30s;插入数据耗时约 8 分钟。

更改成以下模型:

入库操作同样需要先根据 key 查找当前 db 中是否存在该条数据,不存在则写入。

python

测试 4

取数据 整合 耗时 30s;插入数据耗时约 2 分钟。

更改之后性能大幅度提升,由原先的 8 分半钟,缩减为不到 2 分半钟左右,缩减的时间主要体现在入库阶段;

从以上两个例子可以看到,当涉及 I/0 操作时,python 的多线程能发挥较好的性能;而当涉及到 CPU 密集型逻辑运算时,python 的多线程性能不升反降。这里都是由于 python 的 GIL 在发挥的作用。

2、了解 python 的 GIL

这里我们使用的解释器为官方实现的 CPython,它是由 C 语言实现的 python 解释器。同时还存在由 Java 实现的 Jython 解释器,由.NET 实现的 IronPython 等解释器。这里我们主要是依据 CPython 来讲解 GIL 锁。

GIL,全称 Global Interpreter Lock, 是一个全局解释器锁,当解释器需要执行 python 代码时,都必须要获得这把锁,然后才能执行。当解释器在遇到到 I/O 操作时会释放这把锁。但如果当程序为 CPU 密集型时,解释器会主动的每间隔 100 次操作就释放这把 GIL 锁,这样别的线程有机会执行,具体的间隔次数是由 sys.setcheckinterval( number ) 来设定这个值,通过 sys.getcheckinterval() 返回这个值,默认为 100。所以,尽管 Python 的线程库直接封装操作系统的原生线程,但 Python 进程,在同一时间只会有一个获得了 GIL 的线程在跑,其它的线程都处于等待状态等着 GIL 的释放。就这样对于 CPU 密集型操作来说,多线程不但不会提升性能,还会因为线程切换,锁竞争等导致性能的下降。

在我们上面的两个例子中,当涉及到数据的查询与插入时,都需要进行 I/O 交互,并且会等待数据库服务器返回,这个时候,线程会主动释放锁,其他线程能够合理利用这个时间,来做同样的事情。

知道了 GIL 之后,我们才能更加合理的使用 python 的多线程,并不是所有场景都适用于多线程。

同样,Python 的多线程也并不是大家所说的鸡肋,在适合的场景用上了,还是能够起到惊艳的作用。

关于python的迭代(Iteration)定义及应用 流量视频课程

img

访梦

关注

如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。

默认情况下,dict迭代的是key。如果要迭代value,可以用forvalueind.itervalues(),如果要同时迭代key和value,可以用fork,vind.iteritems()。

那么,如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断:

最后一个小问题,如果要对list实现类似Java那样的下标循环怎么办?Python内置的enumerate函数可以把一个list变成索引元素对,这样就可以在for循环中同时迭代索引和元素本身:

>>>fori,valueinenumerate(['A','B','C']):

...printi,value

使用内建的isinstance函数可以判断一个变量是不是字符串:

>>>x='abc'

>>>y=123

>>>isinstance(x,str)

True

>>>isinstance(y,str)

False

盘点 | 2017 年关于 Python 的 12 件大事 营销视频课程

img

容容

关注

点击上方“CSDN”,选择“置顶公众号”

关键时刻,第一时间送达!

作者 | 汤哥在北京

【编者按】Python 被称为是最接近 AI 的语言。几乎所有的深度学习框架都要用到 Python 来编程,这是所有转型AI的程序员都绕不过去的一道坎。以下盘点了 Python 在2017年内发生的所有大事件。

1.Python大热:从业界反馈看机器学习语言趋势——2017年1月

在深度学习市场,对 Python 的招聘需求仍然最高。但前五大语言的排序变成了Python,C++,Java,C,R。这里有很明显的对高性能计算语言的侧重。 而且,Java 的增长速度惊人,它可能很快成为深度学习市场的第二位。在可预期的将来,R 还不会成为最受欢迎的深度学习语言。令人惊讶的是 Lua 的存在感之低。要知道,开源框架巨头之一的 Torch 便是基于 Lua,许多开发者因此会认为它在深度学习市场占有特殊地位。

2.Python正式迁移到GitHub——2017年2月

Python 正式迁移到源码托管平台 GitHub,拥抱了 Git 版本控制系统。Python 社区早在2014年就开始讨论是否迁移到 GitHub 以改进开发流程,当时 Python 使用的版本控制系统是 Mercurial,而 GitHub 只支持 Git 版本控制系统,所以这也意味着 Python 需要迁移到 Git。

3.2017年7大最佳的人工智能编程语言——Python第一!——2017年3月

在第三届互联网大会中百度CEO李彦宏曾表述:靠移动互联网的风口已经没有可能再出现独角兽了,因为市场已经进入了一个相对平稳的发展阶段,互联网人口渗透率已经超过了50%。而未来的机会在人工智能。的确互联网巨头公司在人工智能领域投入明显增大,都力争做人工智能时代的“带头大哥”。

Python作为一门编程语言,其魅力远超C#,Java,C,C++,它被昵称为“胶水语言”,更被热爱它的程序员誉为“最美丽的”编程语言。从云端、客户端,到物联网终端,python应用无处不在,同时也是人工智能首先的编程语言。

4.Python荣获2017年最流行编程语言——2017年7月

根据IEEE Spectrum研究报告显示,在2016年排名第三的Python在今年已经成为世界上最受欢迎的语言,C和Java分别位居第二和第三位。最近我们报道,Java被斯坦福大学定为入门语言,主要是因为这个编程语言已经“老化”,斯坦福大学不鼓励学生采用CS 106课程,而是用JavaScript代替Java。然而,根据这份报告,Java仍然是招聘者中最受欢迎的技能之一

5.Python超过R,成为数据科学和机器学习的最常用语言——2017年8月

近期,数据挖掘资讯网站KDnuggets开展了一项调查,问题是“2016年和2017年,在数据分析、数据科学和机器学习工作中,你使用R、Python、两者都用,还是其他工具?”

对954名受访者的调查显示,Python尚未完全“吞噬”R,但2017年Python生态系统已经超越了R,成为数据分析、数据科学和机器学习领域领先的平台,同时也在迅速吸引其他平台的用户。

2016年,Python排名第二(“主要使用Python”占比为34%,“主要使用R”占比为42%),而在2017年的结果中,Python和R的占比分别为41%和36%。

6.Python是高收入国家增长最快的语言,没有之一!——2017年9月

本文根据Stack Overflow流量分析了Python及其他一些编程语言的发展情况,同时也对高收入国家与非高收入国家的情况进行了对比。以下是译文。

我们最近的研究表明,富裕国家(世界银行定义为高收入国家)喜欢研究的技术与其他国家的不同。其中,我们看到最大的差异是Python语言。当我们关注高收入国家的时候,甚至可以看到Python的增长速度甚至比Stack Overflow Trends或者其他一些全球软件开发排名显示的还要快。

7.Ubuntu 17.10默认不再安装 Python 2——2017年10月

这次的 Ubuntu 17.10 虽然不是重要的 LTS 版本,连 Ubuntu 官网的介绍中都将其视作是明年的 Ubuntu 18.04 LTS 的前奏,但是这个版本其实还是有几个处女式创新:

这是第一个放弃 32 位支持的主版本,不过 17.10 的官方风味版本还会继续支持 32 位。

这是七年来 Ubuntu 主版本第一次放弃 Unity 用户界面,改投 GNOME 怀抱,目前采用的是最新的 GNOME 3.26.1。

这是第一次默认使用 Wayland 显示服务器,而 X.Org 显示服务器则是可选的。当然如果你的机器不支持 Wayland ,会自动回退到 X.Org。

默认不再安装 Python 2,Python 3 更新到了 3.6。

8.numpy宣布不再支持python2.7——2017年11月

Python核心团队计划在2020年停止支持Python 2。NumPy项目自2010年以来一直支持Python 2和Python 3,并且发现支持Python 2对我们有限的资源增加了负担;因此,我们最终计划将停止支持Python 2。现在,我们已经进入了社区支持的Python 2的最后几年,NumPy 项目公布了它逐步淘汰 Python 2 支持的时间表,目标是帮助下游生态系统制定计划并完成过渡。

我们目前的计划如下:

到2018年12月31日为止,所有的NumPy版本都将完全支持Python2和Python3。

从2019年1月1日开始,任何新的功能版本都只支持Python3

9.Google Research Blog 推出开源 Python 库“Tangent”

日前,Google Research Blog 推出开源 Python 库“Tangent”。据介绍,这个库与现有的机器学习库相比,存在诸多优势,可以大大改善了用户的使用体验。

整理如下:

Tangent 是一个全新的免费开源 Python 库,可以用于自动微分。与其他现有的机器学习库相比,Tangent属于源到源(source-to-source)系统,可以用 Python f 函数调用新的 Python 函数,计算出 f 的梯度。对用户来说,这大大改善了梯度计算的可见性,更易于编辑和调试。

10.Python 进入山东小学教材,还列入全国计算机等级考试——2017年12月

从 2018 年起,浙江省信息技术教材将不会在使用晦涩难懂的 VB 语言,而是改学更简单易懂的 Python 语言。也就是说,Python 将纳入高考内容之一。

据「海码爸爸」称:浙江省信息技术课程改革方案已经出台,Python 确定进入浙江省信息技术高考,从 2018 年起浙江省信息技术教材编程语言将会从 VB 更换为 Python。

其实不止浙江,教育大省北京和山东也确定要把 Python 编程基础纳入信息技术课程和高考的内容体系,Python 语言课程化也将成为孩子学习的一种趋势。

尤其山东省最新出版的小学信息技术六年级教材也加入了 Python 内容,小学生都开始接触 Python 语言了!!

11.微软正考虑添加 Python 为官方的 Excel 脚本语言(2017年12月19日)

据外媒报道,微软正考虑添加 Python 为官方的一种 Excel 脚本语言,如果获得批准,Excel 用户将能够像目前使用 VBA 脚本一样,使用 Python 脚本与 Excel 文档、数据以及一些 Excel 核心函数进行交互。

12.Python Web 开发框架 Django 2.0 发布(2017年12月04日)

流行 Python Web 开发框架 Django 释出了 2.0 版本。主要变化包括:停止支持 Python 2 系列,Django 1.11.x 是支持 Python 2.7 的最后版本,Django 2.0 支持 Python 3.4、3.5 和 3.6,其中 Python 3.4 将于 2019 年 3 月结束支持,因此 Django 2.0 也将是最后一个支持 Python 3.4 的版本。

以上为Python2017年的大事件,欢迎大家补充!

原文地址:https:///question/61057521

Python不能用于大型项目?关于Python的10大误解 流量视频课程

img

无邪

关注

语言多元化是PayPal编程文化中一个重要的组成部分。在C++和Java长期流行的同时,更多的团队选择了Jva和Scala。同时,Braintree的收购也引入了一个久经世故的Ruby社区。Python作为一门特别的语言,在eBay和PayPal有很长的历史。而且其流行程度依然有增不减。

eBay的开发者支持Python这个应用于基层领域多年的语言。甚至在eBay管理层官方支持Python以前,技术人员就开始使用Python。我在几年前加入PayPal并选择Python来写内部应用,然而,我却发现了PayPal中将近15年以前的Python代码。

目前,Python 支撑着 超过50个项目, 包括:

功能和产品型, 例如 eBay Now 和 RedLaser运营和基础设施型**, 从开放的 OpenStack 到专有设施中间层服务和应用型**, 例如 PayPal 用来设定价格以及检测用户可用功能的那个(服务/应用)监测代理和接口*型*, 用于涉及到部署和安全的一些用例批处理任务*型*, 例如数据导入,价格调整,及其它项目以及不计其数的开发者工具

在接下来的文章里我将详细介绍那些使得 eBay 和 PayPal 的 Python 生态系统从2011年的不超过25个工程师到2014年超过260个工程师所使用的技术和举措。对于本文,我则会专注于10个不得不予以揭露的关于 eBay 和 PayPal 的企业环境的谬误。

谬误 #1: Python 是一门新语言

伴随着所有的初创公司正在使用它以及孩子们最近也在学习它的事实,这个谬误为何仍然存在是可以理解的。实际上 Python 已经 超过23岁了, 它最初发布于1991年, 早于 HTTP 1.0协议 5年且早于 Java 4年. 目前比较有著名的很早就使用 Python 的例子是在1996年: Google 的第一个成功的网络爬虫。

如果你对于长长的 Python 历史比较好奇,Python 的作者 Guido van Rossum 已经为你准备好整个故事。

谬误 #2: Python 没有被编译

不像 C++ 一样需要一个独立的编译器工具链,Python 实际上被编译成了字节码,和 Java 或者许多其他的编译型语言十分相似。更进一步的编译过程,如果有的话, 取决于运行时环境, 不管是 CPython,PyPy,Jython/JVM,IronPython/CLR,或是其它的进程式虚拟机(process virtual machine)。参考 谬误 #6 来了解更多。

一条在 PayPal 以及其它地方的通用原则就是,(应用的)安全性不能依赖于代码的已编译状态。更为重要的是加强运行时环境的安全,因为实质上每种语言都有一个解码器,或者能被拦截并导出受保护的状态。参考下一条谬误来了解更多的 Python 安全性问题。

谬误 #3: Python 不安全

轻量级 Python 的亲和力可能使他看起来不怎么可怕,但是这里直觉很大程度上是受到了误导的. 安全的一个核心原则就是尽可能让呈现的目标更小. 大系统是违背安全原则的,因为他们趋向于 使行为过渡集中化, 并且也 让开发者难于理解. Python 通过倡导简洁化来边缘化这些恶心的问题. 更有甚者, CPython 通过让自己成为一个简单、稳定并且易于审核的虚拟机来使这些问题得到解决. 事实上,近期 Coverity Software 的一个分析结果显示 CPython 得到了他们的最高质量评级。

Python 还拥有一系列可扩展的开源、产业标准化的安全库序列. 在PayPal, 我们把安全和授信看做是重中之重, 我们发现 hashlib, PyCrypto, 以及 OpenSSL, 通过 PyOpenSSL 和我们自己的定制构建的结合,涵盖了 PayPal 多样化的安全和性能需求。

这些诸多的原因,使得 Python 成为PayPal(和eBay)的应用程序安全团队在某些业务中最快的选择. 这里有把Python用在PayPal的安全第一环境中的几个以安全为基础应用程序:

创建安全代理,以促进密钥的轮换以并巩固加密实现同业界领先的 HSM 技术集成为缺乏兼容性的技术栈构建受TLS保护的封装代理为我们内部的互相认证计划生成键和证书开发主动的漏洞扫描器

另外,还有无数存在安全隐患的用Python构建,面向操作的系统, 诸如防火墙和连接管理. 未来,我们一定回去深入的整合PayPal Python的安全事项.

谬误 #4: Python 是一门脚本语言

Python 确实可以用来编写脚本,并且因其简单的语法、跨平台并且无所不在于 Linux, Macs, 和其它Unix 机器而成为这个领域的领跑者之一。

事实上, Python 可能是常规用途编程语言中最灵活的技术. 以下是一些实例:

电信基础设施 (Twilio)支付系统 (PayPal, Balanced Payments)神经科学和心理学 (许多, 许多, 例子)数值分析和工程 (numpy, numba, 以及 更多其它)动画(LucasArts, Disney, Dreamworks)游戏后台 (Eve Online, Second Life, Battlefield, 以及 其它很多)Email 基础设施 (Mailman, Mailgun)媒体存储和处理 (YouTube, Instagram, Dropbox)操作和系统管理 (Rackspace, OpenStack)自然语言处理(NLTK)机器学习和计算机版本 (scikit-learn, Orange, SimpleCV)安全性和渗透性测试 (很多很多 以及 eBay/PayPal大数据 (Disco, Hadoop support)如理 (Calendar Server, 它 驱动了 Apple iCal)搜索系统 (ITA, Ultraseek, 还有 Google)Internet 基础设施 (DNS) (BIND 10)

更别提网站和web服务了,那些都不在少数. 事实上,PayPal工程师看起来像是有兴趣致力于基于Python的web特性,比如 YouTube 和 Yelp. 如果对Python成功案例的更大清单感兴趣,那就看看官方的清单吧.

谬误 #5: Python 是弱类型的

Python 类型系统的特点是拥有强大、灵活的类型操作. 维基百科上对此作出的阐述.

而存在一个不争而有趣的事实是, Python 是比Java更加强类型的. Java 对于原生类型和对象区分了类型系统,它让null存在于一个灰色地带. 另一方面,现代的 Python 拥有一个统一的强类型系统, 其中什么都没有 的类型是明确指定的. 更进一步的,JVM自身也是动态类型的,因为可以把它的 根源 追溯到由Sun所收购的Smalltalk VM的一个实现。

Python的类型系统 很棒,但要提供给企业级使用,目前仍然还有许多更重大的事项需要关注。

谬误 #6: Python 速度慢

首先是有一个重要区别: Python 是一门编程语言,而不是运行时环境. Python 拥有几个实现:

CPython是参考实现, 且也是广泛发布和使用的实现.Jython是Python用于JVM的是一个成熟的实现.IronPython是 Microsoft 针对其自家的通用语言运行时——又名 .NET,实现的Python .PyPy是一个正在日趋成熟的Python实现,拥有JIT编译,增量垃圾收集诸多先进的特性.每一个运行时都有其自己的性能特点, 而且他们本身也不慢. 这里更重要的地方在于不能错误地把一个性能指标分派到一门编程语言智商. 应该总是把该评估用在一个应用程序运行时上面,最好是针对一个特定的使用场景。

清楚了那些事项之后,下面就是一些有Python提供的小项,体现其重要的性能优势:

把 NumPy 用作 Intel 的 MKL SIMD接口PyPy的 JIT 编译能 达到比C还快的性能Disqus 能在同样的100个盒子上容纳两亿五千万到5亿用户

诚然,这些都不是最新的列子,只是我个人的最爱罢了. 这将很容易扯到高性能Python以及独立提供的运行时这些广阔的领域. 我们不应只是专注于解决单个特殊的案例, 而是应该把注意力放在对开发人员在 最终产品性能 方面的生产力的普遍影响上面, 特别是在一种企业级环境之下。

C++ vs Python,. 两种语言在同一个输出下的对比.

给定足够的时间,一个循规蹈矩的开发者只会按照下面这种经过论证的方式来编写精确高效的软件:

设计实现一个可以正确完成任务的软件,包括开发单独的测试测试性能,明确瓶颈优化,根据测试和Amdahl法则,并且利用Python与C的渊源

虽然这听起来很简单,但是即使是老道的工程师,这依旧是一个非常耗时的过程。Python设计之初就考虑到了这一套开发流程。根据我们的经验,通常C++和Java项目完成一次迭代流程的时间,够Python项目完成三次迭代流程。今天,PayPal和eBay中不乏有Python项目使用更少的代码战胜了同类C++和Java项目,这多亏了快速的开发使得仔

细的裁剪和优化变得可能。

Myth #7: Python无法做到大规模

大规模有许多定义,但无论怎样,YouTube是个大规模网站。每月UV超过十亿,每分钟上传的视频时长超过100小时,占用互联网带宽的20%,所有这一切都以Python作为核心技术。Dropbox,Disqus, Eventbrite, Reddit, Twilio, Instagram, Yelp, EVE Online, Second Life,,以及,是的,以及eBay和PayPal中都有Python大规模的例子,这些证明大规模不仅仅是可能:它是一种模式。

成功的关是键简单性且一致性。CPython,Python的主要虚拟机,其最大限度地放大了这些特性,从而演变出了一个精确可测的运行时。人们很难发现 Python程序员关心垃圾的收集暂停或应用地启动时间。拥有强大的平台和网络支持,Python其本身自然而然的智能水平可扩展,BitTorrent就是其充分的体现。

此外,规模化主要涵盖测量和迭代。Python是以分析和优化为要义建立的。看Myth #6了解更多Python如何垂直拓展的细节。

Myth #8: Python缺少好的并发支持

除了偶尔叫嚣性能和规模化的问题,有人想提的技术些,”Python缺乏并发,”或者,”GIL怎么样?”如果几十个反例仍不足以支持Python水平及垂直拓展规模的能力,那么再更深地解释CPython实现细节也不会有帮助,所以我会简短些。

Python拥有强大的并发原语,包括generators, greenlets, Deferreds, 和futures.。Python有优秀的并发框架,包括eventlet, gevent,和Twisted。Python在定制运行时尚投入了惊人的工作量,包括Stackless和 PyPy。所有烦人这些和更多表明,根本不存工程师们在Python并发编程方面的缺憾。同时,所有这些都正在被正式的在企业生产环境中支持或使用。例如,请参考Myth #7。

全局解释器锁,或称GIL,是Python在大多数应用场景下的性能优化,也是几乎所有CPython实现代码的开发上的基础优化。GIL使得Python可以很便利地使用操作系统的线程或轻线程(通常指greenlets),且不影响使用多进程。更多相关信息,请看该主题的Q&A列表,以及Python文档中的介绍。

在PayPal中,一个典型服务的部署需要多台机器,多个进程,多个线程,以及一个数字非常庞大的greenlets,相当于一个非常强大可扩展的并行环境(见下图)。在大多数的企业环境中,团队更倾向于往更高层次过度,谨慎并注重灾难恢复。然而,在某些情况下,每台机器每天Python服务仍然处理数以百万计的请求,而且轻松处理。

一个基于单一worker的协同异步架构草图。最外层的盒子是进程,下一个层次为线程,这里这些线程都是轻线程。操作系统处理线程间的抢占,而I/O异步协同合作。

谬误 #9: Python 程序员很稀缺

事实上,现在使用 Python 的 web 开发者的确没有使用 PHP 或者 Java 的 web 开发者多。这可能主要是由于企业需求和教育之间的相互作用导致的,不过 教育领域(教学所使用的编程语言)的趋势使得情况可能产生变化 。

也就是说,使用 Python 的开发者并不稀缺。现在全世界有数百万使用 Python 的开发者。已有几十个Python 技术大会、 StackOverflow 上成千上万的 Python 内容问答、雇佣大量使用 Python 的开发者的大企业比如 YouTube 、 美国银行( Bank of American )和 LucasArts/Dreamworks 等等,这些都显而易见地证实了这一点。在 eBay 和 PayPal 我们一直保持拥有几百位使用 Python 的正式开发者,这是怎么做到的呢?

那么,当一个项目被创建时为什么它会被首推?对于孩子来,大学生和教授们来说,Python作为第一门程序设计语言是非常易于学习的。在eBay,仅仅需要一个星期,一个新的Python程序员就能展示一个真正的成果,并且他们开始散发光芒常常只要2-3个月,通过Internet的宝藏(互动式教程,书,文档和开源代码库)一切皆有可能。

另外一个重要的考虑因素是,项目使用Python会更简单,它不会像其他项目那样需要那么多的开发者。在谬误6和谬误9中提到的那样,在Python项目中,学习像Instagram那样的高效团队是一个常见的比喻,并且这确实是我们在eBay和PayPal的经验。

Myth #10: Python不适应于大项目

Myth #7 讨论了大规模运行Python的项目,但开发Python大规模项目是什么情况呢?正如在Myth #9中提到的,大多数Python不被人看好。 然而Instagram在其被亿元美金收购当天达到千万的点击量,而整个公司只有十几个人。Dropbox在2011年只有70个工程师,其他团队更少。所以,Python适合大规模团队吗?

美国银行实际上有超过5000的Python开发者,一个单独的项目超过一千万行Python代码。JP摩根也经历了类似的转变。YouTube也有数千的开发者和数百万行的代码。大规模产品和团队每天都在使用Python,因为它具有良好的模块化和封装特性,在特定方面许多的大规模开发建议是一致的。工具,强大的惯例以及代码审查促使了项目规模化管理的现实。

幸运的是,Python发展于上面所提到的好的奠基。我们在检查执行使用pyflakes以及其他工具进行Python代码的静态分析,正如坚持PEP8——Python语言的基础风格指南。

最后,应该指出的是,除了调度加速Myth #6以及#7中所提到的,使用Python的项目通常需要更少的开发者。我们常见的成功案例中,使用Java或C++的项目通常有3-5开发者耗时2-6个月,最终由单一的开发者在2-6周(或小时,因为这些原因)完成é...

img

在线咨询

建站在线咨询

img

微信咨询

扫一扫添加
动力姐姐微信

img
img

TOP