8

我正在做一个涉及大量基于 Web 和 AI 工作的大型项目。我对 Python 非常满意,尽管我唯一关心的是并发编程和扩展这个项目以使其在集群上工作。因此,Clojure for AI 和对 Java 函数调用的支持带来了并发编程。

使用 Python 完成所有基于 Web 的 api 工作并让 Clojure 处理大部分并发 AI 工作是否是个好主意?

编辑:让我详细解释一下交互。Python 将完成大部分繁琐的工作(抓取、图像处理、改进数据库等等)。如果可能,Clojure 将处理数据库或从 Python 获取数据。我除了一些 CPython 与 Python 和 Clojure 的链接。

Edit2:问这个问题可能很愚蠢,但这是一个相当长期的项目,会发生相当大的演变并经历多次迭代,Clojure 是一种语言吗?便携性够吗?

4

4 回答 4

14

我用 Clojure 的后端(在任意数量的机器上)和 Ruby on Rails 的前端构建了一个令人尴尬的并行数字运算应用程序。我不是特别喜欢 RoR,但当时这是一个零预算项目,我们手头有一个愿意免费工作的 Rails 程序员。

Clojure 部分由(大致)一个控制器、数字处理节点和一个实现 JSON-over-HTTP API 的服务器组成,该 API 是 Rails Web 应用程序的接口。Clojure 节点使用 RabbitMQ 相互通信。因为我们在应用程序的不同部分之间定义了清晰的 API,所以以后在 Clojure 中重写前端很容易(因为这更适合我们的需要)。

如果您正在从事一个具有较长生命周期和持续开发工作的分布式项目,那么将应用程序设计为通过定义明确的 API(json、bson、... over AMQP、 HTTP,...或数据库)。这意味着您可以使用自己熟悉的语言快速开始,如有必要,可以在稍后阶段用另一种语言重写部分内容。

于 2012-05-11T21:32:07.477 回答
6

我看不出将 Python 用于 Web 应用程序和 Clojure 用于并发数据处理/后端代码有什么大问题。我假设您会使用 JSON over http 之类的东西来进行两者之间的通信,这应该可以正常工作。

我个人会同时使用 Clojure(例如使用优秀的Noir作为 Web 框架,使用Korma作为数据库的东西。),但是如果你说你的经验主要是在 Python 中,那么从生产力的角度坚持使用 Python 可能是有意义的观点(至少在短期内)。

要回答有关 Clojure 未来的问题:

  • 它肯定会留在这里。它有一个非常活跃的社区,并且可能是目前“最热门”的 JVM 语言之一(与 Scala 和 Groovy 并列)。它似乎在大数据/分析领域做得特别好
  • Clojure 在库支持方面具有特别的优势,因为它可以轻松使用任何 Java 库。从实践的角度来看,这对于新语言来说是一个巨大的优势,因为它可以立即解决通常是建立新语言生态系统的最大问题之一。
  • Clojure 是一种新的语言,它仍在经历大量的发展。如果您选择使用 Clojure,您应该意识到您需要付出一些努力来保持最新状态并让您的代码与最新的 Clojure 版本保持同步。我个人认为这不是一个问题,但对于习惯于像 Java 这样更“稳定”的语言的人来说,这可能会让他们感到惊讶。
  • Clojure 非常便携——它基本上可以在任何你可以获得相当现代的 JVM 的地方运行,现在几乎无处不在。
于 2012-05-12T02:26:50.233 回答
4

如果您可以构建双方以使用数据和纯(ish)函数进行通信,那么这应该会很好。将您的 clojure 函数包装在采用并返回 JSON(或更优选地 clojure 形式)的 Web 服务中应该使您的基于 Python 的前端可以访问它们,这不会大惊小怪。

当然,全程用 Clojure 编写会更有趣。;)

如果这是一个长期项目,而不是构建交换数据的干净功能(如获取和返回值)接口变得更加重要,因为它将使您能够独立地发展组件。

于 2012-05-11T20:22:37.007 回答
0

在这种情况下,我个人喜欢按以下顺序开始。

  • 将系统划分为子系统,对每个系统的功能进行“非常明确”的定义,并且该定义应遵循“只做一件事,保持简单”的原则。在这个阶段不要考虑语言等。
  • 选择运行这些子系统的平台(不是语言)。例如:JVM、Python VM、NodeJs、CLR(Mono)、其他 VM。尝试选择几个平台,或者如果可能的话只选择一个平台,因为这确实使复杂性方面的生活更轻松。
  • 选择对这些平台进行编程的语言。这是非常主观的,但对于 JVM,您可以使用 Clojure 或 Jython(如果您像我一样喜欢动态语言)。

就 Clojure 的未来而言,这是一种由“优秀程序员社区”而不是某个公司开发的语言。我希望这能消除您对 Clojure 的“长期”关注的疑虑。顺便说一句,Clojure 是 LISP,因此您可以按照自己的方式修改语言并自行修复,即使有人不为您这样做。

于 2012-05-12T09:07:17.743 回答