0

我在 Python 中使用 networkx(OpenSuse 12.3 上的 2.7.3)来分析一些大图。在分解我的大网络(9800 个节点,6273292 个边)然后运行 ​​networkxconnected_components_subgraph(GRAPH)函数之后,Python 不再通过调用 shell os.system()(我还没有测试过其他 shell 通信技术subprocess)。

该函数本身运行顺利,我得到分解图,然后我可以毫无问题地操作。

请参阅下面的代码示例

# this function is just included for completeness, but runs fine
# -------------------------------------------------------------------------
import networkx as nx
import os
def build_network(filename):    
    with open(filename) as f:
        content = f.readlines()

    GRAPH=nx.Graph()

    for connection in content:
        GRAPH.add_edge(connection.split("\t")[0], connection.split("\t")[1][:-1])

    return GRAPH   
#--------------------------------------------------------------------------


## CODE FROM HERE
GRAPH = build_network("mtrx_large.abc") 
os.system("ls")            # runs fine

subgraphs = nx.connected_component_subgraphs(GRAPH)

os.system("ls")            # gives a -1 error - no os.system(<>) commands can run now

我完全被难住了,这引发了一个非常重要的障碍。此行为发生在标准 Python 解释器中ipython并通过标准 Python 解释器发生。在 ipython 中ls直接运行现在什么都不返回,但如果我使用cd它实际上可以自动完成目录。

更新

这种行为在我的 Ubuntu 机器 (12.04) 上无法重现,因此似乎特定于 OpenSuse 或(更有可能)我的工作站。我的 Ubuntu 机器只有 8GB 的​​ RAM,这意味着在加载图表并执行连接的子组件操作后,只有 700MB 是空闲的,这让我认为这可能不是 OpenSuse 机器上的(直接)内存问题。

更新 2

所以我实际上只是在的 Ubuntu 机器上重现了它,这很奇怪,但现在我无法再次重现它,即使在遇到内存错误之后也是如此。如果有人想尝试,可以在这里找到矩阵文件(72MB)——我建议使用Save as... . 只需运行cd到其中包含此文件的目录并执行我在上面粘贴的代码。您需要networkx安装(显然)。

更新 3

重新启动我的 OpenSuse 系统并运行后,ssh我能够成功运行代码。仍然不确定问题可能是什么 - 也许与重新启动之前我有大约 1GB 已用交换空间的事实有关?

更新 4

结果表明交换问题似乎无关紧要(即使没有使用交换空间也可以重现错误)。这很烦人 - 目前只有重新启动有帮助。

4

0 回答 0