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

将Clojure与Python混合是一个好主意吗?,python,clojure,Python,Clojure,我正在做一个大项目,涉及很多基于网络和人工智能的工作。我对Python非常熟悉,尽管我唯一关心的是并发编程和扩展这个项目,使它能够在集群上工作。因此,Clojure支持AI和Java函数调用,并带来并发编程 使用Python完成所有基于web的api工作,并让Clojure处理大部分并发AI工作,这是一个好主意吗 编辑: 让我详细解释一下这种互动。Python将做大部分的脏活(刮片、图像处理、改进数据库等等)。如果可能的话,Clojure将处理数据库或从Python获取数据。我发现了一些与Pyt

我正在做一个大项目,涉及很多基于网络和人工智能的工作。我对Python非常熟悉,尽管我唯一关心的是并发编程和扩展这个项目,使它能够在集群上工作。因此,Clojure支持AI和Java函数调用,并带来并发编程

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

编辑: 让我详细解释一下这种互动。Python将做大部分的脏活(刮片、图像处理、改进数据库等等)。如果可能的话,Clojure将处理数据库或从Python获取数据。我发现了一些与Python和Clojure的链接

编辑2:
这可能是一个愚蠢的问题,但这是一个相当长期的项目,将有相当多的发展,并经过多次迭代,Clojure是一种语言吗?它是否具有足够的可移植性?

如果您可以构建双方使用数据和纯(ish)函数进行通信,那么这应该可以很好地工作。将clojure函数包装在接受并重新运行JSON的web服务中(或者更可取的是clojure表单)应该可以让基于Python的前端访问它们,这不会有额外的麻烦

当然,用Clojure一路写下来更有趣


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

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

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


如果您正在处理一个具有长生命周期和持续开发工作的分布式项目,那么将应用程序设计为多个单独的模块,通过定义良好的API(json、bson、…通过AMQP、HTTP、…或数据库)进行通信是有意义的。这意味着您可以快速开始使用您熟悉的语言,并在稍后的阶段使用另一种语言重写部分(如有必要)。

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

我个人会将Clojure用于这两个方面(例如,使用优秀的web框架和数据库),但如果您说您的经验主要是使用Python,那么从生产力的角度来看(至少在短期内)坚持使用Python可能是有意义的

回答有关Clojure未来的问题:

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

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

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

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

      您在这些层之间考虑什么样的接口?杰顿?共享数据库后端?消息队列。。。?就目前而言,这个问题太宽泛了,无法回答。我们对这个问题进行了一些更新。我对分配给谁任务以及如何使交互工作感到困惑。欢迎提出任何建议。不要越界@冰球,如果你想的话