Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否有任何项目/库集可以方便地在各种编程语言/平台之间进行通信?_Python_Haskell_Interop_Jvm_Communication - Fatal编程技术网

Python 是否有任何项目/库集可以方便地在各种编程语言/平台之间进行通信?

Python 是否有任何项目/库集可以方便地在各种编程语言/平台之间进行通信?,python,haskell,interop,jvm,communication,Python,Haskell,Interop,Jvm,Communication,我刚刚完成scala中一个相对较大的项目,不久将开始另一个相关项目 我还没有选择该语言,我希望我的决定更多地基于该语言的特性或可用库,而不是互操作性问题 这就是为什么要问这个问题 我的要求是(最重要的是): 各种编程语言/平台之间的互操作性(可能是JVM、Haskell、Python、C/C++) 易于原型化/重构 易于编程 性能良好,无需太多优化(这可能不包括使用文件) 在用不同语言编写并分布在不同平台上的程序之间进行通信的最简单方法之一是使用库 ZeroMQ是我的最爱之一,因为它简单、速度快

我刚刚完成scala中一个相对较大的项目,不久将开始另一个相关项目

我还没有选择该语言,我希望我的决定更多地基于该语言的特性或可用库,而不是互操作性问题

这就是为什么要问这个问题

我的要求是(最重要的是):

  • 各种编程语言/平台之间的互操作性(可能是JVM、Haskell、Python、C/C++)
  • 易于原型化/重构
  • 易于编程
  • 性能良好,无需太多优化(这可能不包括使用文件)

  • 在用不同语言编写并分布在不同平台上的程序之间进行通信的最简单方法之一是使用库

    ZeroMQ是我的最爱之一,因为它简单、速度快,并且可以为许多语言提供绑定:


    您还可以使用ActiveMQ、RabbitMQ,或者任何您遇到的具有多种语言绑定的其他工具。

    我几乎所有的通信都是通过来完成的,准确快速地在语言之间移动数据非常简单。它是一个简单的密钥/存储数据库,允许我用python和

    import redis
    r = redis.Redis()
    r.set("a", 33)
    
    然后,java中几乎相同的代码(减去大量初始化,因为java非常冗长)


    +1到消息传递,特别是当收件人不可用时库将延迟传递时。如果决定使用消息传递,则需要定义消息传递协议。一个很好的选择是(ReST),尽管它的名字叫ReST,但它是一个基于HTTP的无状态、基于消息的交互协议。它需要非常仔细的API定义,这本身就是一件非常好的事情


    希望这能有所帮助。

    有很多方法,但它们分为三个主要选项:

  • 使用某种集中通信节点(消息队列、键值存储,可能是数据库)
  • 跨平台分布式对象技术(如CORBA)
  • HTTP直接在组件之间使用您喜欢的任何web服务方法(尽管大多数人没有被Enterprise Borg像各种restful web服务一样洗脑)
  • 我会忽略2(事实证明从来没有那么容易)


    至于1,请注意,数据库通常不应被用作假消息传递平台。仅当它真正是关于存储数据集时才使用它。还请注意,这是一个消息队列和键值存储。

    在各种编程语言/平台之间进行通信是否有明显的通用方法?HTTP呢?您可能需要更具体一点。为什么您确实需要在许多不同的语言之间进行互操作?您可以使用套接字并定义自己的协议,可能使用一些广泛支持的序列化库,比如我唯一能想到的就是TCP/IP和一个独特的通信协议,对于您的应用程序来说足够具体,对于您的应用程序来说足够一般,您可以再次使用它。您必须为协议找到一种通用的实现语言,每种语言都可以与之接口,或者用每种语言编写一个本机实现。这听起来好像你需要寻找一种产品。@MattH and(a)wvd我没有说得更具体,因为我还没有开始做任何事情,也没有做出任何选择。无论哪种方式,从我以前的经验来看,我发现我花在实现需求上的时间比模块之间的接口要多得多(我使用了REST和RMI/CORBA)。因此,我希望能够自由选择最符合我要求的语言、平台或库集。Pyqt用于GUI,Haskell或C++的数学(由于不同的原因),斯卡拉(JVM),因为这是我所知道的最好的,并且会使我更快地编码许多不同的任务,等等,这看起来是一个很好的解决方案。Redis是用Python、Java和Haskell实现的,因此它完全符合您的选择。只有C++才需要做一些额外的工作。大多数工作实现在这里看到其他客户端,我使用REST广泛,但我正在寻找一些使原型更容易的东西。也许我应该添加“原型”作为一个需求。“无论如何,这是一个很好的建议。”Marcin感谢您将其分为三种主要方法。像这样思考会使我们更容易对这个问题进行推理。@AlexandreMartins没问题。
    r.get("a"); // in java