Как я могу использовать модуль Perl из Python? - PullRequest
4 голосов
/ 23 октября 2010

Существует модуль Perl, который обеспечивает идеальную функциональность для моего приложения Python.Есть ли способ для меня, чтобы использовать это?(это сложно , на его портирование у меня уйдет месяц)

Я не хочу вызывать подпроцесс для каждого использования, так как он мне нужен несколько сотен тысяч раз(это определенный тип анализатора данных).

Спасибо за ваш совет.

РЕДАКТИРОВАТЬ: попросил модуль.Это Mail :: DeliveryStatus :: BounceParser .Он сопоставляет уведомления о состоянии доставки почты со списком строк, которые могут указывать на отклоненную почту.(он запускает тело / заголовки DSN через массу регулярных выражений, а также другие тесты. Это серьезно потрясающий модуль.)

Ответы [ 4 ]

5 голосов
/ 23 октября 2010

Я не уверен, что он все еще активен, но PyPerl может вас заинтересовать

Тем не менеебыть поддержка большинства анализаторов данных в Python.Было бы хорошо, если бы вы могли указать на анализатор, который вы просматриваете.

В качестве альтернативы, вы можете создать полный процесс с этим модулем perl и использовать IPC, механизмы сокетов для передачи данных и результатов назад и вперед.из ваших процессов Python и Perl.

4 голосов
/ 23 октября 2010

Я знаю, что вы можете использовать Python в Perl с Inline::Python, но это не ваш вопрос.Возможно, в Python есть похожая функциональность.Возможно, что-то вроде perlmodule ?

2 голосов
/ 24 октября 2010

Я бы использовал что-то вроде HTTP :: Server :: Simple для создания локального веб-сервиса.Тогда вам просто нужно делать запросы против этого.Это все еще внешний процесс, но он только один.

0 голосов
/ 23 октября 2010

Я не хочу создавать подпроцесс для каждого использования, так как он мне нужен несколько сотен тысяч раз (это специфический тип анализатора данных).

Плохая политика. Базовые оболочки Linux делают этот вид процесса постоянно разветвленным. Предотвращение нереста процессов является плохим ограничением.

Однако вы можете сделать это тривиально.

python prepare_data.py | perl my_magic_module.pl | python whatever_else.py

Оберните ваш магический модуль простым Perl-скриптом, который читает из stdin, выполняет магические действия и пишет в стандартный вывод.

Разбейте ваш Python на две части: часть, выполненную перед вызовом perl, и часть, выполненную после вызова perl.

Соберите высокопроизводительный конвейер, который (a) выполняет все три шага одновременно и (b) не обрабатывает много процессов.

Это, кстати, также будет использовать каждое ваше ядро.

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