将Clojure与Python混合是一个好主意吗?

时间:2012-05-11 20:16:04

标签: python clojure

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

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

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

EDIT2: 可能是一个愚蠢的问题要问,但这是一个相当长的项目,它会发展很多并且经过几次迭代,Clojure是一种语言留下来吗?它足够便携吗?

4 个答案:

答案 0 :(得分: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,...或数据库)。这意味着您可以使用您熟悉的语言快速入门,并在必要时在稍后阶段用其他语言重写部分。

答案 1 :(得分:6)

我无法看到将Python用于Web应用程序和Clojure用于并发数据处理/后端代码的大问题。我假设你会使用像JSON这样的东西来进行两者之间的通信,这应该可以正常工作。

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

回答有关Clojure未来的问题:

  • 这绝对是留下来的。它有一个非常活跃的社区,可能是目前“最热门的”JVM语言之一(与Scala和Groovy一起)。它似乎在大数据/分析领域做得特别好
  • Clojure在库支持方面具有特殊优势,因为它可以轻松地使用任何Java库。从实用的角度来看,这是一个巨大的优势,因为它可以立即解决通常在新的语言生态系统开发中遇到的最大问题之一。
  • Clojure是一种新语言,仍在进行大量的开发。如果您选择使用Clojure,您应该知道您需要付出一些努力来保持最新状态并使用最新的Clojure版本保持代码最新。我个人并不认为这是一个问题,但对于习惯于像Java这样更“稳定”的语言的人来说,这可能会让人大吃一惊。
  • Clojure非常便携 - 它基本上可以在任何地方运行,你可以得到一个相当现代的JVM,现在几乎无处不在。

答案 2 :(得分:4)

如果你可以构建双方使用Data和Pure(ish)函数进行通信,那么这应该可以很好地工作。将您的clojure函数包装在Web服务中,这些函数可以使用JSON(或者更优选的是clojure形式),这样可以使基于Python的前端可以访问这些函数。

当然,在Clojure中一直编写它会更有趣。 ;)

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

答案 3 :(得分:0)

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

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

就Clojure的未来而言,这是一种由“惊人的程序员社区”而不是某些公司开发的语言。我希望能够清除你对Clojure“长期”关注的怀疑。顺便说一句,Clojure是LISP,所以你可以按自己喜欢的方式修改语言并自己解决问题,即使有人不这样做。