【问题标题】:Is Python good enough for big applications? [closed]Python 对于大型应用程序是否足够好? [关闭]
【发布时间】:2011-04-11 15:41:54
【问题描述】:

从我接触 Python 的那一刻起,我唯一能说的就是“它太棒了”。我正在使用 Django 框架,我对事情发生的速度以及这种语言对开发人员的友好程度感到惊讶。但是从很多方面我都听说 Python 是一种脚本语言,对于小事情、实验等非常有用。

所以问题是可以用 Python(和 django)构建一个大而重的应用程序吗?由于我主要专注于 Web 开发,因此此类应用程序的示例可能是 Stack Overflow、Facebook、Amazon 等。


附:根据许多答案,也许我不得不改写这个问题。有几个使用 Python 的大型应用程序(最好的例子是 You Tube),所以它可以处理它们,但为什么它在大型项目中不像(例如)Java、C++ 和 .NET 那样流行?

【问题讨论】:

  • 你为什么要关心?如果您的网站变得如此受欢迎,您可能还是要重写它。
  • 您质疑 Python 的能力是因为您听说它对小型、快速的实验很有用?这并不意味着它对大事没有用。
  • jleedev,这并不意味着它也适合做大事。
  • 成为 Stack Overflow、Facebook 或 Amazon 所面临的问题不会是因为您的语言,而是因为您的架构。你真的无法预料到这种受欢迎程度,所以不要费心去设计它。让用户在路上解决问题,而不是担心在发布日成为 Facebook 规模。不要浪费时间优化不需要的东西。

标签: python django web-applications


【解决方案1】:

在大型应用程序上使用 Python 是一种乐趣。与您获得的其他企业流行语言相比:

  • 没有编译时间,如果您曾经参与过大型 C++ 项目,您就会知道这会花费多少时间
  • 简洁明了的语法使阅读代码更容易,而且在阅读别人的代码甚至是你很久以前编写的代码时也能大大节省时间
  • 核心级别的可移植性,如果您的应用在多个平台上运行很重要,那肯定会有所帮助
  • 对于大多数事情来说它已经足够快了,如果不是这样,用 Cython 和 numpy 等工具在 C 中重写热点是微不足道的。出于速度原因而反对动态语言的人已经忘记了 80-20 规则(或者从未听说过)。恕我直言,在为性能关键型应用程序选择语言时要考虑的重要一点是,您可以在需要时轻松访问 C 级别,而 Python 非常适合这一点

然而,它不是一门神奇的语言,您需要使用其他语言中用于大型项目的相同技术:TDD(有些人可能认为它比其他语言更重要,因为缺少类型检查,但这不是赢得其他语言,单元测试在大型项目中总是很重要),干净的 OO 设计等等......否则维护您的应用程序将成为一场噩梦。

与 .NET、Java 等相比,它在企业中缺乏接受度的主要原因。可能没有成群的顾问和“认证专家”吹嘘他们的工具是地球上最好的东西。我还听说 Java 很容易被接受,因为它的语法类似于 C++……考虑到 C# 也选择了这条路线,这可能不是一个愚蠢的想法。

【讨论】:

  • 所有这些都是非常好的点。我只能补充一点,python 会自动将模块编译为字节码,而 memcache 或 fastcgi 之类的工具也可以提高性能。
  • 另外 90% 的运行时间在 10% 的代码中,因此请找到热点(内部循环)并尝试简单的事情,例如 @numba.jit、numpy 矩阵运算或转译成 Julia .如果您需要更快的速度,可以转译为 Rust。
【解决方案2】:

Google 经常使用 python,所以我认为它已经准备好了。我们使用 python 作为我们产品的胶水,所以我们很满意。

【讨论】:

  • 是的,据我所知 You Tube 在 python 上工作,但最近我看了一部 Google Python Class 电影 (youtube.com/watch?v=tKTZoB2Vjuk&feature=channel) 再次声明 Python 对于小事情和实验非常有用.
  • 它对于小事情和实验很有用,因为你用 python 写东西的速度要比用大多数其他语言快得多,而且当你做实验时,你不想浪费太多时间,你可以花在实际上发展。人们倾向于用 python 开发和测试,然后用 C/C++ 写下来,如果他们需要速度,可以将其绑定到 python 中。
  • 我会反驳说——如果一种语言/技术堆栈在小范围内工作但不能扩展,那么是的,你会这样做。但是,我建议 python 确实可以扩展。但是它可能不适合您的用例,在这种情况下,另一个堆栈可能是更好的“大型实现”选项。
【解决方案3】:

YouTube 的后端几乎完全使用 Python。 Here 是 YouTube 可扩展性团队的工程经理 Cuong Do Cuong 的演讲,其中详细介绍了他们面临的问题以及他们如何解决这些问题。他指出,语言速度几乎从来都不是瓶颈。

我怀疑 YouTube 的负载明显高于您正在处理的任何内容。

【讨论】:

    【解决方案4】:

    当您说“大型应用程序”时,您的问题的答案实际上归结为您的想法。简单的答案是“是”。 Python 是极其复杂的系统的支柱,它做得非常优雅(看看 Twisted 和 Django 有多大但设计得很好)。但是,它和其他任何工具一样。它包含可能适合也可能不适合您的应用程序域的性能权衡。

    如果您希望构建一个必须以超过 1000Hz 的频率运行复杂计算的高性能飞行模拟器......那么 Python 可能不是整个项目的正确选择。另一方面,如果单 CPU 性能不是主要因素,或者应用程序将分布在多个服务器上以实现可扩展性要求,那么 Python 可能是一个不错的选择。

    令人惊讶的是,人们很容易忘记开发时间是多么昂贵。 Python 以开发生产质量应用程序的惊人速度而闻名。对于几乎任何不重要的事情,节省的开发时间将远远超过将一些额外的服务器投入池中的相关成本。

    【讨论】:

    • 在我读过的几个论坛上,django 的设计不是很好。无论如何都不是 Python 的错误。
    • “1000 Hz 飞行模拟器”可能不是一个很好的例子,现在绝大多数游戏都是由脚本语言驱动的(LUA 比 Python 更常见,但那是因为它提供了更高级的嵌入功能),只有时间关键部分用低级语言编写。
    • 游戏绝对是这样,但它们的运行频率不是 1000Hz。大多数高保真飞行模拟器(用于测试和评估领域的模拟器)通常都有足够的性能关键代码来排除 Python 作为主要语言。无论如何,重点是,虽然不常见,但有时您确实需要编译语言提供的速度。
    • 是的,它对时间关键部件很重要。我看不出一个 1000 Hz 的模拟器与以 60、80% 的执行时间在 20% 的代码中运行的模拟器有什么不同。
    • 请记住,80/20 泛化就是这样,泛化。引擎模型与 Airwake 模型交互 与天气模型交互消耗大量计算能力。此外,1000Hz 模拟非常容易受到时序波动的影响。由于操作系统施加的延迟,任何内存分配或其他系统调用都可能破坏计算。表面上游戏和 T&E 环境看起来很相似,但实际上,它们是完全不同的世界。许多其他应用领域也是如此。概括很有用,但请记住尊重它们的局限性。
    【解决方案5】:

    一般来说,是的,你可以。

    我主要专注于 Web 开发,因此我可以举出 Stack Overflow、Facebook、Amazon 等示例。

    Reddit.com 是用 Python 编写的。它拥有庞大的用户群,并获得了相当多的流量,而且似乎表现不错。 Reddit 不使用 Django。

    【讨论】:

      【解决方案6】:

      自己看:

      http://en.wikipedia.org/wiki/List_of_Python_software

      我认为它可以处理大型应用程序。

      【讨论】:

        【解决方案7】:

        Python 是 Web 开发的理想选择。它轻巧、简单,擅长将其他部分粘合在一起,并与高级接口一起使用。如果我做“网络”开发,我不会使用其他任何东西。

        更新0

        它也是一种用于脚本、小型跨平台应用程序和原型设计的高级语言。只有当极端的性能要求严格时,它才真正开始崩溃。也就是说,它在很大程度上阻止了事情。我还发现很难重构(动态类型的属性)和利用平台特定的绑定。就像在大多数其他优秀语言中一样,这些事情都可以解决(很容易,因为 Python 的 C 实现以及用于此目的的大量模块)。

        Python 是最好的高级语言,它唯一不能替代的语言是 C。

        【讨论】:

        • 我认为代码重构参数非常重要,我想知道为什么没有其他人提到这一点。同样重要的是要提到像 Visual Studio 这样的 IDE 对于创建和维护大型应用程序非常强大。我们经常在我只使用 java 和 .Net 的工作场所讨论这个问题。然而,当我回到家时,我启动了 PyCharm 并开始编写 python 代码。我相信随着 python3 中引入的可选类型和像 PyCharm 这样的 IDE,-python 正在慢慢地向 .Net 和 Visual Studio 的强大方向收敛。
        【解决方案8】:

        python有两个非常重要的因素:

        1) 易于使用

        2) 易于与其他编程语言交互

        因素 1

        因为 python 是一种强调代码的简单性和可读性的语言,无论是对于它自己的语法还是库,这等于编写更少的代码。对于大型软件来说,这非常重要。你是简单的,更容易被别人理解,更容易调试,更容易重新编码,重写和修改。多人团队之间轻松交流。

        因素 2

        为什么要重新发明那个轮子?您想使用 C/C++ 库吗? Java 或 .NET 库怎么样? Python 会让你做到这一点,甚至会宠坏你,让你在不离开 Python 语法舒适区的情况下享受体验。 Jython、Ironpython、Cython、ctypes、pyrex 等都是优秀的工具,让 python 无限,它的功能让你总是使用 python 语法在所有这些不同的语言/框架/运行时编码。你还能要求什么呢 ?

        最终,它的 python 灵活性使其加速普及,始终与易用性齐头并进。强大的功能和易用性对于小型、大型或大型开发人员来说是一个难以抗拒的巨大诱惑。

        【讨论】:

          【解决方案9】:

          我将回答您修改后的问题,即为什么有人会使用不同的语言或技术堆栈。首先,我喜欢 Python。很棒的语言,绝对有它的优点。但是,我选择 C#/.NET 作为我选择的技术并使用 Python 编写脚本。

          是的,Python 作为一门语言非常简单/干净,而且没有编译时间。但是,我发现使用强/静态类型语言要容易很多倍。 #1 原因是 IntelliSense(我的意思是 GOOD IntelliSense - 在这方面对 Python 编辑器不满意)。 IntelliSense 在开发的简易性/速度方面产生了巨大的影响。

          C# 得到 Microsoft 的支持(无论好坏)。虽然那里的 h8t3rs 可以扔石头,但很难否认微软拥有整个堆栈(桌面、服务器、网络、移动设备等)的技术,并且它们都很好地集成在一起。我也知道它得到了数百名致力于提供最佳体验的开发人员的支持。我还可以访问大量网站并观看视频、阅读文章并找到我需要的任何东西。支持很好。

          我知道 Python 有很多优秀的(和大量的)库和框架可供使用,但我也感到各个项目之间缺乏连续性。在这里使用这个第 3 方库,把这个第 3 方库扔在那里,在这里使用这个开源项目......虽然我喜欢开源,但要达到微软推出的质量需要更长的时间。

          最后,Visual Studio 是我体验过的最优秀的 IDE 之一。我知道那里有很多优秀的文本编辑器(我爱你 VIM!),但是很难击败将源代码控制、代码编辑、编译、构建、发布、测试和部署全部打包到一个最优秀的包中.

          综上所述,Python 非常棒,并且可以在大型网站上出色地执行 - 不要让我感到困惑。但是,使用企业技术有一些有效的论据。这仅取决于您(或您的团队)将需要哪些资源、您已经熟悉什么以及您计划在应用程序成功后如何扩展。如果你对技术和库感到满意,有一个社区来回答棘手的问题,并且可以划分你的代码,这样如果你确实需要重新编写它,它已经被分解了,那么我说你会做得很好.

          【讨论】:

          • 看看 PyCharm,它几乎和 VS 一样好。
          • IntelliSense 经常在 VS 中中断(通过谷歌搜索查看该主题的线程数)。 C# (还)不是多平台的。你有 Mono,但也有很多人认为,如果 Mono 在某个时候变得足够流行,微软会简单地用专利索赔来控制它,这将导致它被切断或(更有可能)完全消灭。如果您必须在非 Windows 平台上工作,C# 是不行的。对于 Python,有许多不错的编辑器 - PyCharm、Spyder 等。您还拥有非常棒的 ipython,它允许您在浏览器中编写代码并运行它。
          • 对于许多任务,基于 REPL 的开发为您提供比 IntelliSense 更多的信息(它允许您与正在运行的应用程序交互并查看值、更改类和方法,您还可以从 IPython 中进行 deepreload),只需在要编辑或编码的函数中设置断点,然后转到 REPL 和 REPL 中的代码,然后将完成的代码复制/粘贴到编辑器中。您还可以按 ALT+Shift+E 来评估 REPL 中的一行。确保使用 IPython,因为默认 shell 很糟糕,而且多行语句有问题。
          • 刚刚尝试将 Python 调试器附加到 REPL 并且它损坏了 : ( 对于 Python 3.7。但是,将 Hy 与 parinfer 一起使用是在 Python 中进行元编程的绝佳方式shaunlebron.github.io/parinfer/.http://docs.hylang.org/en/…
          【解决方案10】:

          性能方面 - 是的,当然适用于 Web 前端。性能瓶颈始终是数据库。

          【讨论】:

          • 并非总是如此。我想说主流大型系统中的瓶颈通常是机器间通信。有时这是 DB,有时只是简单的人编写代码,假设函数将在微秒内返回,但没有考虑到调用是 rpc 并且可能需要几秒钟。
          • @Preet,当然可以用任何语言编写糟糕的实现。
          【解决方案11】:

          事实上,Python 为您提供了所有最好的编程能力。简单、强大、快速! 在您的项目中尽情享受吧!

          【讨论】:

            【解决方案12】:

            请参阅https://stackoverflow.com/questions/1906795/what-are-some-famous-websites-built-in-django,了解 Python(在本例中为 Django)如何处理繁重负载的示例。

            Disqus、Pinterest、Pownce 和 Instagram 均每秒处理数百个请求、数百万用户等。

            【讨论】:

              猜你喜欢
              • 2012-01-23
              • 1970-01-01
              • 2015-01-28
              • 2023-03-14
              • 2012-09-17
              • 1970-01-01
              • 1970-01-01
              • 2014-07-28
              • 2010-12-20
              相关资源
              最近更新 更多