0

Python (OpenSuse 12.3 では 2.7.3) で networkx を使用して、いくつかの大きなグラフを分析しています。私の大きなネットワーク (9800 ノード、6273292 エッジ) を分解してから、networkxconnected_components_subgraph(GRAPH)関数を実行した後、Python はシェルを介して呼び出すことができなくなりましたos.system()(他のシェル通信技術は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

私は完全に困惑しており、これはかなり重大な障害となります。この動作はipython、標準の Python インタープリターと両方で発生します。ipython ではls、直接実行すると何も返されませんが、使用するcdと実際にディレクトリをオートコンプリートできます。

アップデート

この動作は私の Ubuntu ボックス (12.04) では再現できないため、OpenSuse または (より可能性が高い) 私のワークステーションのいずれかに固有のようです。私のUbuntuボックスには8GBのRAMしかありません。つまり、グラフをロードして接続されたサブコンポーネント操作を実行した後、700MBしか空いていないので、おそらくOpenSuseマシンの(単純な)メモリの問題ではないと思います.

更新 2

それで、実際にUbuntuボックスでそれを再現しましが、これは非常に奇妙ですが、メモリエラーに達した後でも、再び再現することはできません。試してみたい方は、マトリックス ファイルをここ (72 MB) から入手Save as... できます。. cdこのファイルを含むディレクトリに単純に実行し、上で貼り付けたコードを実行します。インストールする必要がありますnetworkx(明らかに)。

更新 3

OpenSuse システムを再起動してssh実行すると、コードを正常に実行できます。問題が何であるかはまだわかりません-再起動前に約1GBの使用済みスワップスペースがあったという事実に関連している可能性がありますか?

更新 4

スワップの問題は関連していないようです (スワップ領域が使用されていない場合でも、エラーを再現できます)。これは面倒です。現在のところ、再起動のみが役に立ちます。

4

0 に答える 0