加快python -c调用

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (11)

我从我的PHP Web应用程序发出一个python命令行调用来执行一些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

是否有任何命令行选项或配置设置可以加快这些程序的速度?

也许我可以预先编译进口的症状?

编辑:是否有一个python模式可以守护python等待我的请求与导入的sympy libs?然后我只会“发送” 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
提问于
用户回答回答于

SymPy启动缓慢但速度不慢。你看到的缓慢只是你的特定方法在SymPy下很慢。通过使用int而不是浮点数,您可以使示例更快一些。

大部分时间花在解决方案上,这对于你的许多简单关系来说似乎是不必要的。例如,x<4当你可以使用as_set时,没有必要调用solveset

In [7]: (x<4).as_set()                                                                                                            
Out[7]: (-∞, 4)

您还可以将其他条件重写为更直接的形式,例如

In [11]: piecewise_fold(Min(Max(x, 4.0000), 5.0000).rewrite(Piecewise))                                                           
Out[11]: 
⎧5.0  for x ≥ 5.0
⎪                
⎨4.0  for x ≤ 4.0
⎪                
⎩ x    otherwise 

我认为你可以组合一个更有效的解决方案,处理该情况而不是解决方案。我建议创建一个比有效分派简单案例更有效的函数,x<4并且只在更复杂的情况下调用solveset。

热门问答

IM会话类型可以扩展吗?

software微软、谷歌、腾讯、阿里、百度……
推荐
您好,IM SDK会话分为以下几种 1、C2C 会话,表示单聊情况自己与对方建立的对话,读取消息和发送消息都是通过会话完成。 2、群会话,表示群聊情况下,群内成员组成的会话,群会话内发送消息群成员都可接收到。 会话分组暂不支持,需要您自行处理UI,同步分组信息。... 展开详请

Tencent Cloud API 3.0 SDK for PHP 没有文件夹 vendor?

推荐

为了防止和composer冲突,所以github上特意设置了不导出这个目录。如需要获取源码,请使用git clone的方式获取,不要用github上的下载源码方式。

lora接入腾讯物联网是只能在深圳地区吗?

DylanRichard

腾讯 · 产品经理 (已认证)

万物互联的时代,欢迎来到IoT的世界
推荐

深圳的南山及龙岗全区,可以租用腾讯运营的网络,支持CLAA协议,其它区域需要客户购买网关接入LPWA物联网络管理平台,支持LoRaWAN协议,我们也有网关、模组及传感器产品售卖。

ckafka是否支持kafka-connect-jdbc?

您好, 现在CKafka支持 kafka-connect-kafka(内侧功能),暂时还不能支持 jdbc的connector。如果这是您的需求,请提交工单,联系腾讯云工程师描述您的需求,我们会尽快规划并实现。

沙龙活动报名通知什么时候会收到通知呢?

Richel码农
推荐已采纳

沙龙报名之后会收到报名成功的短信,活动前一天会发送签到二维码短信和邮件,请留意.

请问有创建项目的sdk吗?

推荐

这是api2.0的接口,使用对应的sdk,代码托管在http://github.com/qcloudapi

所属标签

扫码关注云+社区

领取腾讯云代金券