【问题标题】:Embedding Node.js in Python在 Python 中嵌入 Node.js
【发布时间】:2014-11-12 02:01:07
【问题描述】:

我正在考虑将 node.js 嵌入到 python 中以将 node.js 功能添加到我现有的 python 代码中。我知道可以反过来做,如this post 中所述。但是,我希望尽可能多地保持现有 Python 项目的完整,这意味着允许 Python 管理执行。

PyV8 几乎可以满足我的所有需求,除了提供一个类似 node.js 的环境,允许我在 PyV8 中使用 node.js 模块,所以这似乎是一个很好的起点。

node.js 是否提供类似于 V8 的外部 API,以便可以修改 PyV8 以包装 node.js?如果没有,有没有办法将 node.js 环境加载到 PyV8 中,以便我可以使用 node.js 模块?

谢谢!

【问题讨论】:

  • 你想做什么,你不能让一个节点服务与你的 python 脚本并行运行,或者只是节点本身?
  • 与其专门询问 Python,不如先询问是否可以将 Node 嵌入到 C(或 C++)应用程序中。如果这不可能,那么将其嵌入 Python(至少是 CPython,这可能是您可能想要的)将是不可能的;如果是这样,将其嵌入 Python 最坏的情况是将 C 嵌入包装在 Python C 扩展模块中,或者通过ctypescffi 调用它
  • 同时,我上次检查过(那是不久前……),Node(不像 CPython……或者,就此而言,V8)没有正式的嵌入支持,也没有计划添加任何嵌入支持,但是有是您可以研究的各种第三方包装器,例如 tacnode
  • @bitoiu 好问题。您可能是对的,服务可能是解决方案。但是,考虑到选择,我更喜欢与 node.js 紧密集成以提高可管理性和速度。 wrt Speed,Node.js 几乎肯定会受到处理器的限制,并且启动一个私有实例将对此有所帮助。 wrt 可管理性,我宁愿不给系统增加额外的接口。
  • 这是一项开销,但在系统设计上,与您在维护一项其他人无法理解的功能(嵌入)时可能产生的开销相反,这可能会在未来给您带来更多问题。

标签: javascript python node.js pyv8


【解决方案1】:

不支持您想要执行的操作。不像 CPython 解释器,甚至是 V8 JavaScript 解释器,Node.js 不是为嵌入式而设计的,没有这样做的接口,也没有认真的计划来改变它。

我找不到任何官方文档,但有许多线程(如 this one)提供相关信息。

但这并不意味着这是不可能的。 Node 的顶层并没有那么复杂,实际上你只需要修补它的几个部分来做不同的事情。而且,事实上,人们已经尝试过这样做,在像 tacnode 这样的项目中。我不知道它们中的任何一个是否已准备好迎接黄金时段,但它们可能值得一看,尤其是如果你愿意并且能够在它们不完整的情况下做出贡献。

当然,这只会让你嵌入 C 或 C++;你仍然需要嵌入 Python。但是包装一个 C 共享库以便您可以在 Python(嗯,CPython 和 PyPy)中使用它是一个长期解决的问题。 Python 几乎从一开始就有扩展模块,如果您不想编写任何 C 代码,还有 ctypescffi。还有像 Cython 这样的第三方项目可以让你编写几乎是 Python 的代码,直接调用你的共享库,就像它是原生 C 一样,并编译成 Python 扩展模块。

因此,它几乎可以肯定是可行的,但它可能不会是微不足道的,或者打包并准备好开箱即用。

【讨论】:

    【解决方案2】:

    不要嵌入。相反,让 python 和 Node 在两个不同的进程中并在它们之间进行通信。以 RabbitMQ 为例,它有 Node 和 Python 的客户端。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-12
      • 2023-01-11
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      • 2011-12-10
      • 2011-02-08
      • 1970-01-01
      相关资源
      最近更新 更多