2014-09-17 1 views
2

Я рассматриваю возможность вставки node.js в python для добавления функции node.js в мой существующий код python. Я знаю, что это можно сделать наоборот, как описано в this post. Тем не менее, я хочу сохранить как можно больше существующего проекта Python, что позволяет Python управлять исполнением.Вложение Node.js в Python

PyV8 делает практически все, что я хочу, за исключением обеспечения среды node.js, которая позволила бы мне использовать модули node.js в PyV8, поэтому она кажется хорошей отправной точкой.

Имеет ли node.js внешний API, аналогичный интерфейсу V8, так что можно модифицировать PyV8 для wrap node.js? Если нет, есть ли способ загрузить среду node.js в PyV8, чтобы я мог использовать модули node.js?

Спасибо!

+4

Что вы хотите сделать, что вы не можете просто работать с узлом, работающим бок о бок с вашим скриптом python или просто узлом? – bitoiu

+1

Вместо того, чтобы спрашивать конкретно о Python, вы должны сначала спросить, может ли Node быть встроен в приложение C (или C++). Если это невозможно, вложение его в Python (по крайней мере, CPython, что вы, вероятно, захотите) не будет возможно; если это так, вложение его в Python, в худшем случае, будет вопросом обматывания вложения C в модуле расширения Python C или вызове его через 'ctypes' или' cffi' – abarnert

+1

Между тем, последний раз я проверил (что было давно ...) , Node (в отличие от CPython ... или, если на то пошло, V8) не имел официальной поддержки встраивания, и никаких планов не добавлять, но были разные сторонние обертки, такие как ['tacnode'] (https://github.com/ZECTBynmo/tacnode), которые вы можете исследовать. – abarnert

ответ

4

Что вы хотите сделать, не поддерживается. В отличие от, скажем, интерпретатора CPython или даже интерпретатора V8 JavaScript, Node.js не был предназначен для встраивания, не имеет интерфейса для этого и не имеет серьезного плана для его изменения.

Я не могу найти официальную документацию, но есть многочисленные потоки, такие как this one, которые предоставляют соответствующую информацию.

Но это не значит, что это невозможно. Верхний слой узла не настолько сложный, и на самом деле вам просто нужно исправить некоторые его части, чтобы делать разные вещи. И, на самом деле, люди пытались сделать именно это, в проектах вроде tacnode. Я не знаю, готовы ли они к прайм-тайм или нет, но, возможно, стоит посмотреть на них, особенно если вы готовы и можете внести свой вклад, если они неполны.

Конечно, это только дает вам возможность встраивания в C или C++; вам все равно нужно встроить в Python. Но обертывание совместно используемой библиотеки C, чтобы вы могли использовать ее в Python (ну, CPython и PyPy) является долгой проблемой; У Python есть модули расширения с самого начала, а также ctypes и cffi, если вы не хотите писать код C. И есть сторонние проекты, такие как Cython, чтобы вы могли писать почти-Python-код, который напрямую вызывает вашу общую библиотеку, как если бы она была родной C, и компилируется в модуль расширения Python.

Таким образом, это почти наверняка выполнимо, но это, вероятно, не будет тривиально, или упаковано и готово выйти из коробки.

0

Не вставлять. Вместо этого у вас есть python и Node в двух разных процессах и обмениваются данными между ними. В примере RabbitMQ есть клиенты как для узла, так и для Python.

 Смежные вопросы

  • Нет связанных вопросов^_^