Каков наилучший метод для вызова программы Python 3.x из Python 2.x? - PullRequest
7 голосов
/ 15 ноября 2011

Я пишу веб-приложение Django.На данный момент Django не поддерживает Python 3 .Для целей моего веб-приложения, не вдаваясь в подробности, мне по сути нужно использовать некоторые библиотеки, которые поддерживают только Python 3. Достаточно сказать, что после долгих тщательных исследований альтернатива 2.x не была найдена.

Итак, мой вопрос заключается в следующем: как мне поступить?

У меня установлены Python 2 и 3 на моем сервере, и у меня написан код Python 3, и я ожидаю вызова.Я подумывал о том, чтобы просто использовать модуль subprocess, эффективно вызывая Python 3 из командной строки, но вопрос в том, является ли это лучшим методом или есть лучший метод, который я мог бы использовать вместо этого здесь?Использование subprocess кажется мне довольно хакерским.Не поймите меня неправильно, я в порядке с хаком, я просто хочу убедиться, что больше ничего не нужно делать вместо этого.

Ответы [ 2 ]

5 голосов
/ 15 ноября 2011

Поскольку интерпретаторы Python 3 и Python 2 являются полностью отдельными исполняемыми файлами и в вашей системе установлены отдельные библиотеки, использование subprocess для вызова одной из другой является лучшей практикой.Это совсем не хак.Существует несколько способов передачи данных между ними, но эти два интерпретатора должны запускаться как отдельные процессы.

При этом вам может потребоваться учитывать время запуска, связанное с запуском процесса интерпретатора.Это возвращает нас к тому, как передавать данные между двумя процессами.Если ваш код Python 2 будет часто вызывать подпрограммы Python 3, вам может потребоваться структурировать программу Python 3 как демон.Но вы все равно используете subprocess для его запуска.

1 голос
/ 15 ноября 2011

Запустить программу 3.x как отдельный сервис, а затем подключиться с помощью какого-либо механизма RPC?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...