2013-12-24 1 views
3

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

ответ

3

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

pypy compute.py | python plot.py 

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

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

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

Если вы используете достаточно современную версию CPython и Pypy, вы можете попробовать еще одну альтернативу Listener и Client для мультипроцессора. Обратите внимание на то, что в Python и Pypy (multiprocessing Listeners and Clients between python and pypy) была использована функция прослушивателя Cross Python и клиент. Модуль multiprocessing.manager, вероятно, также будет работать через разные cpython и pypy.

0

Если у вас есть ресурсоемкие функции лучший выбор заключается в следующем:

A) Смотрите, если NumPy может помочь,

B) Смотрите, если функции могут быть оптимизированы в питона,

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

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

+0

A) Нет. Это алгоритмические функции (я играю с простыми числами). B) Pypy обычно силен в оптимизации алгоритмических функций. C), но это требует много времени и сложнее. Я в ситуации, когда pypy должно быть хорошо, чтобы вычислить функцию, и C-python должен быть хорош для построения графика. Проблема состоит в том, чтобы просто соединить эти два. – olivier

+0

Добавлена ​​ссылка на возможное решение. –

+0

Но первое предложение этого несколько пугает. (Просто доказательство концепции, едва работает и т. Д.). Кроме того, кажется, вам нужно перекомпилировать pypy с некоторыми отключенными опциями. Использование модуля многопроцессорности должно быть прекрасным, но я все еще изучаю python. Если нет никаких предостережений, наверняка кто-то уже это сделал. – olivier