Я хочу построить функции с интенсивным использованием процессора с помощью 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.
В качестве альтернативы, calculate.py может просто использовать модуль подпроцесса для запуска plot.py в CPython вместо того, чтобы полагаться на канал, организованный оболочкой.
В качестве альтернативы вы можете использовать pickle, который может сохранить больше информации об объектах python, но будьте осторожны, так как pickle не является хорошо стандартизированным форматом.
Если вы используете достаточно новую версию CPython и Pypy, другой альтернативой, которую вы можете попробовать, являются классы Listener и Client модуля multiprocessing.connection. Обратите внимание, что реализация кросс-питона Listener и Client была нарушена в некоторых старых версиях Python и Pypy (многопроцессорные слушатели и клиенты между python и pypy). Модуль multiprocessing.manager, вероятно, также будет работать с разными cpython и pypy.
Если у вас есть функции, интенсивно использующие процессор, лучше всего:
A) Посмотрите, может ли numpy помочь,
Б) Посмотрите, можно ли оптимизировать функции в python,
C) Рассмотрите возможность написания расширения C для вашей функции.
D) Рассмотрите возможность встраивания cpython и matplotlib в pypy, как показано здесь< /а>.
Вы можете использовать execnet. Существует несколько примеров подключения различных интерпретаторов Python.