我从我的PHP web应用程序发出一个python命令行调用,以执行一些症状分析(然后我解析回症状输出)。
这些调用需要很长时间,但我认为更多的是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,用导入的证状库来等待我的请求?那么我只会“发送”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
https://stackoverflow.com/questions/56155624
复制相似问题