繁体   English   中英

从服务器执行时,Python脚本崩溃

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM