![](/img/trans.png)
[英]python script works from command line but not when it is executed from webapplication
[英]Python script crashes when executed from server
我正在通过php exec函数在本地执行python脚本,并且一切正常。 现在是时候该在服务器中移动项目了,执行相同的python脚本时遇到了一些问题。
在这两种情况下,我都有相同版本的Python(2.7.3),并且安装了所有必需的库。 我发现了问题的出处,但我不知道为什么。 这是我的python脚本中的这一行:
import networkx as nx
CG1_nodes=nx.connected_components(G1)[:]
它在本地成功运行,但在服务器中崩溃。 我发现如果删除:
[:]
然后就可以了。 我还检查了G1的内容及其填充。 知道我在这里缺少什么吗?
您正在消耗发电机。 它可能有数十亿个项目。 如果是这种情况,则python可能资源不足。 通过检查结果列表的大小来确保您不会使系统超载。
我还将研究networkx
(NumPy?SciPy?)使用的库中的切片问题。 也许尝试:
CG1_nodes=list(nx.connected_components(G1))
避免切片。
在两种情况下,您都应检查您是否具有相同版本的networkx。
在较旧的networkx版本中,列表为nx.connected_components(G1)
。 在较新的版本(1.9.1)中,它是一个生成器。 如果X
是生成器,则X[:]
不起作用。 但是,如果X
是一个列表,它就可以。 因此,如果您的计算机和服务器具有不同的版本,则在一种情况下是允许的,但在另一种情况下则不允许。
您通过删除[:]
“修复”此问题,因此CG1_nodes
现在是生成器,而不是列表。 只要您之前使用它与生成器一致,结果(可能)是相同的。 因此,这两个代码将起作用。 显然,明确地将其设为列表是可行的,但可能会占用大量内存。
更多详细信息在此处记录 。 特别注意:
若要恢复以前的行为,请使用
list(connected_components(G))
。
我相信以前的版本会返回按减小的组件大小排序的列表。 新版本未排序。 如果需要对它进行排序,则需要做更多的事情:
sorted(list(nx.connected_components(G)), key = len, reverse=True)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.