撰稿:朱锐、李亚洲地区
Python 做为一类单纯、更易掌控的C词汇,尽管在采用操作过程中存有软肋,但也受很多人的追捧。
Python 吗非常快吗?这须要具体内容难题对症下药。和 C 等校对型词汇较之,Python 在处置位数各方面速率的确非常快。这也从前部说明了 Python 中加速位数处置的库(如 numpy)为何这般重要了。
但,Python 呢在大部份示例上都比其它C词汇慢呢?大相径庭,如果介绍呵呵为化解某一难题而强化的很多 Python 库的操控性计算方法测试,你就会辨认出 Python 比校对型词汇总的来说。以 FastAPI 操控性计算方法为例,FastAPI 是一个用作构筑 API 的当代、加速(高操控性)的 web 架构,采用 Python 3.6+ 并如前所述国际标准的 Python 类别提示信息。Go 词汇或许比 Python 快,但,FastAPI 在构筑 REST API 各方面胜于了 Go 的一些库:
Web 架构计算方法测试,不主要包括 C++ 和 Java web 架构。
反之亦然,在较为 Dask(采用 Python 撰写)与 Spark(采用 Scala 撰写)处置统计数据专门化脊髓光学 pipeline 时,结果显示这三个发动机间没有其本质的操控性差别。
标识符速率 VS 便携性
从新颖的视角上看,在为日常生活组织工作优先选择C词汇时,须要提问数个相同的难题。
难题 1:这种词汇能可信地化解多项业务难题吗?
如果你只关心速率,那么不要用 Python,各种示例都有更快的替代方案。Python 的主要优点在于可读性、易用性和可化解大量难题。Python 可以做为粘合剂,将相同的系统、服务和示例连接在一起。
难题 2:你能找到足够多懂这门词汇的员工吗?
Python 更易学习和采用,因此用户数量不断增长。以前采用 Excel 处置位数业务的用户,现在可以很快学会用 Pandas 撰写标识符,从而学会在不依赖 IT 天然资源的情况下实现自给自足。同时,这也缓解了 IT 和分析部门的负担。
如今,企业更容易找到会 Python、并能用这种词汇维护 Spark 统计数据处置应用程序的统计数据工程师,而不是用 Java 或 Scala 做反之亦然组织工作的人。很多组织在很多示例中逐渐转向采用 Python,因为懂 Python 的员工更容易找到。
较之之下,一些公司迫切须要 Java 或 C# 开发人员来维护他们现有的应用程序,但这些词汇很难(须要数年才能掌控),而且对于新手程序员来说似乎没有吸引力,他们可能采用更单纯的词汇(如 Go 或 Python)在组织工作中挣到更多的钱。
难题 3:相同领域专家间的协同效应
如果你的公司采用 Python,那么业务用户、统计数据分析师、统计数据科学家、统计数据工程师、后端和 web 开发人员、运维工程师甚至系统管理员很可能采用同一类词汇。这将在项目中产生协同效应,来自相同领域的人可以一起工作并利用相同的工具。
统计数据处置的真正困局是什么?
在平时的组织工作中,通常我们遇到的困局不是词汇这类,而是内部天然资源。让我们看几个例子。
示例 1:写入关系型统计数据库
当以 ETL 方式处置统计数据时,最终我们须要将这些统计数据加载到某个集中的地方。尽管我们可以利用 Python 中的多线程,更快地将统计数据写入某些关系型统计数据库,但并行写入次数的增加可能会使该统计数据库的 CPU 容量达到极限。
这意味着 Python 具备并行化和加速操作的机制,但关系型统计数据库(受 CPU 核数的限制)有其局限性,仅通过更快的C词汇很难化解。
示例 2:调用内部 API
另一个例子是采用内部 REST API,以提取统计数据来满足统计数据分析需求,这一案例中词汇这类似乎并不是困局。尽管我们可以利用并行加速来提取统计数据,但这可能是徒劳的,因为很多内部 API 限制了在某一时间段内发出请求的数量。因此,我们会故意让脚本变慢,以确保不会超过 API 的请求限制:
time.sleep(10)
示例 3:处置大统计数据
从处置超大统计数据集的经验来说,无论用什么词汇你都不能直接用笔记本内存来负载大统计数据。这种情况下,你须要利用 Dask、Spark、Ray 等分布式处理架构。在采用单个服务器实例或者笔记本时,处置的统计数据量存有限制。
如果你想把实际的统计数据处置组织工作转移到一个计算节点集群中,甚至采用 GPU 来加速计算,Python 恰好有一个庞大的架构生态系统,使这个任务变得更容易:
你是否想用 GPU 来加快统计数据科学的计算速率?采用 PyTorch、TensorFlow、Ray 或 Rapids(甚至 SQL – BlazingSQL)。
你是否想加速 Python 标识符处置大统计数据的速率?采用 Spark(或 Databricks)、Dask 或 Prefect。
你是否想加快统计数据分析的处置速率?采用加速的专用内存列统计数据库,通过采用 SQL 查询确保高速处置。
此外,如果你须要协调、监测计算节点集群上发生的统计数据处置,你有 Apache Airflow、Prefect 或 Dagster 等数个 Python 组织工作流管理平台可供优先选择,它们可以加速统计数据 pipeline 的开发和维护。
顺带提呵呵,一些人可能会抱怨 Python 没有充分利用其能力或者未对手头难题采用合适的统计数据结构。
总而言之,如果你须要加速处置大量统计数据,那你更须要的是计算天然资源而不是加速的C词汇,而且一些 Python 库能轻松实现在数百个节点上的分布式组织工作。