Вызов функций pypy из C-python

Я хочу построить функции с интенсивным использованием процессора с помощью matplotlib. Я хотел бы использовать pypy, но он несовместим с matplotlib. Само построение не загружает ЦП и не нуждается в ускорении. Интересно, есть ли способ вызвать функцию pypy из C-python. Могу ли я (ab) использовать модуль многопроцессорности и сказать set_executable("/.../pypy") из C-python?


person Olivier Esser    schedule 24.12.2013    source источник


Ответы (3)


Вы можете записать результат своих вычислений на стандартный вывод и передать его другой программе, которая считывает данные для построения из стандартного ввода, например так:

pypy compute.py | python plot.py 

В качестве промежуточного формата вы можете использовать такой формат, как JSON, который доступен в стандартной библиотеке как pypy, так и cpython и может легко преобразовываться из и в примитивы python.

В качестве альтернативы, calculate.py может просто использовать модуль подпроцесса для запуска plot.py в CPython вместо того, чтобы полагаться на канал, организованный оболочкой.

В качестве альтернативы вы можете использовать pickle, который может сохранить больше информации об объектах python, но будьте осторожны, так как pickle не является хорошо стандартизированным форматом.

Если вы используете достаточно новую версию CPython и Pypy, другой альтернативой, которую вы можете попробовать, являются классы Listener и Client модуля multiprocessing.connection. Обратите внимание, что реализация кросс-питона Listener и Client была нарушена в некоторых старых версиях Python и Pypy (многопроцессорные слушатели и клиенты между python и pypy). Модуль multiprocessing.manager, вероятно, также будет работать с разными cpython и pypy.

person Lie Ryan    schedule 24.12.2013

Если у вас есть функции, интенсивно использующие процессор, лучше всего:

A) Посмотрите, может ли numpy помочь,

Б) Посмотрите, можно ли оптимизировать функции в python,

C) Рассмотрите возможность написания расширения C для вашей функции.

D) Рассмотрите возможность встраивания cpython и matplotlib в pypy, как показано здесь< /а>.

person Steve Barnes    schedule 24.12.2013
comment
A) Нет. Это алгоритмические функции (я играю с простыми числами). Б) Pypy обычно силен в оптимизации алгоритмических функций. C) должно работать, но это трудоемко и требует больше времени. Я нахожусь в ситуации, когда pypy должен быть в порядке для вычисления функции, а C-python должен быть в порядке для построения графика. Проблема состоит в том, чтобы просто соединить их. - person Olivier Esser; 24.12.2013
comment
Добавлена ​​ссылка на возможное решение. - person Steve Barnes; 24.12.2013
comment
Но первое предложение этого несколько пугает. (Просто доказательство концепции, почти не работает и т. д.). Более того, кажется, вам нужно перекомпилировать pypy с отключенными некоторыми параметрами. Использование многопроцессорного модуля должно быть в порядке, но я все еще изучаю python. Если нет оговорок, наверняка кто-то это уже делал. - person Olivier Esser; 24.12.2013

Вы можете использовать execnet. Существует несколько примеров подключения различных интерпретаторов Python.

person Mohammad Alhashash    schedule 23.05.2015