Я выполняю вызов командной строки python из моего веб-приложения PHP для выполнения некоторой аналитики sympy (затем я анализирую выходные данные sympy).
Эти вызовы занимают много времени, но я думаю, что это большеЗапуск python и анализ / компиляция кода, которые занимают много времени, а не решение самой системы неравенств.
Дело в том, что моя программа меняется с каждым вызовом: я всегда решаю другую систему неравенств.Нет статической структуры, чтобы я мог импортировать только, например, коэффициенты LSE.Это система разного размера и структуры.Поэтому (я думаю) я не могу использовать pyc-файлы.
Вот два примерных вызова:
/usr/bin/python -c "from sympy import Intersection; from sympy import solveset; from sympy import S; from sympy.abc import x; from sympy.functions.elementary.miscellaneous import Min, Max; print Intersection(*[solveset(p, x, S.Reals) for p in [(x > 4.0000), (x < 6.0000)]])" 2>&1
/usr/bin/python -c "from sympy import Intersection; from sympy import solveset; from sympy import S; from sympy.abc import x; from sympy.functions.elementary.miscellaneous import Min, Max; print Intersection(*[solveset(p, x, S.Reals) for p in [(x > 4.0000), (x < 6.0000), (((x) * 4.0000 + 5.0000) > 5.0000)]])" 2>&1
Система неравенств может стать большой и все время различаться.Вот один с нелинейными выражениями:
/usr/bin/python -c "from sympy import Intersection; from sympy import solveset; from sympy import S; from sympy.abc import x; from sympy.functions.elementary.miscellaneous import Min, Max; print Intersection(*[solveset(p, x, S.Reals) for p in [(x > 4.0000), (x < 6.0000), ((x * (Min(Max(x, 4.0000), 5.0000))) > 7.0000), ((Min(Max(x, 4.0000), 5.0000)) > 5.0000)]])" 2>&1
Есть ли какие-либо параметры командной строки или параметры конфигурации, которые могли бы ускорить эти программы?
Может быть, я смогу предварительно скомпилировать импорт sympy?
Редактировать: Может ли быть режим python, который демонизирует python, ожидающий моих запросов с импортированными библиотеками sympy?Тогда я бы только «отправил» ему команду print Intersection(...)
?
Редактировать 2 :
Благодаря одному ответу я опробовал пакет pypy
,Но, к сожалению, я не могу сообщить об улучшении времени выполнения.Со стандартным python 2.7 я получаю:
# time /usr/bin/python -c "from sympy import Intersection; from sympy import solveset; from sympy import S; from sympy.abc import x; from sympy.functions.elementary.miscellaneous import Min, Max; print Intersection(*[solveset(p, x, S.Reals) for p in [(x > 4.0000), (x < 6.0000), ((x * (Min(Max(x, 4.0000), 5.0000))) > 7.0000), ((Min(Max(x, 4.0000), 5.0000)) > 5.0000)]])"
EmptySet()
real 0m3.080s
user 0m2.920s
sys 0m0.050s
С pypy у меня есть:
# time pypy -c "from sympy import Intersection; from sympy import solveset; from sympy import S; from sympy.abc import x; from sympy.functions.elementary.miscellaneous import Min, Max; print Intersection(*[solveset(p, x, S.Reals) for p in [(x > 4.0000), (x < 6.0000), ((x * (Min(Max(x, 4.0000), 5.0000))) > 7.0000), ((Min(Max(x, 4.0000), 5.0000)) > 5.0000)]])"
EmptySet()
real 0m6.816s
user 0m6.660s
sys 0m0.080s