2017-12-18 1 views
0

私はリストとしていくつかの値を維持し、ユーザが無期限にn秒ごとにリストに追加する必要があるpythonスクリプトを持っていますスクリプトを終了します。リストをファイルにバックアップして、リストの内容をメモリにロードせずに追加することができます。メモリに格納される唯一の部分は、追加される値になります。どのように大きく成長するPythonリストをファイルに裏打ちされ、任意の時点でメモリにロードされない

私はShelveを試しましたが、いくつかのテストを実行した後、ある時点で、既存の永続リストをメモリに読み込んで追加する必要があります。書き戻し= trueの場合、メモリに格納し、最後にファイルに書き込みます。

スクリプトはこのように書きます: -

d = shelve.open(reportDir+curDatName+ (processName.rsplit('.', 1)[0] if processName.endswith('.exe') else processName)) 
    global counter 
    global startTime 

    d['CPU|'+pid] = [] 
    d['RAM|'+pid] = [] 
    d['THREADS|'+pid] = [] 

    startTime = datetime.datetime.now() 
    while(not quit): 
     print('Took a snapshot') 
     counter = counter + 1 
     p = psutil.Process(int(pid)) 
     list = d['CPU|'+pid] 
     print(list) 
     list.append(p.cpu_percent(0.1)/psutil.cpu_count(0.1)) 
     d['CPU|'+pid] = list 
     print('CPU '+ str(p.cpu_percent(0.1)/psutil.cpu_count(0.1))) 
     list = d['RAM|'+pid] 
     list.append(p.memory_percent()) 
     d['RAM|'+pid] = list 
     print('RAM '+ str(p.memory_percent())) 
     list = d['THREADS|'+pid] 
     list.append(p.num_threads()) 
     d['THREADS|'+pid] = list 
     print('Threads- '+ str(p.num_threads())) 
     print(d['RAM|'+pid]) 
     i=0 
     while(not quit and i < interval/chunkWait): #wait in chunks 
      i = i+1 
      time.sleep(chunkWait) 

私のために所望の機能を達成することができ、他のパッケージがありますか?

+0

データベースが必要です。 – BoarGules

+0

@BoarGules要件に適合することがわかっている特定の種類のデータベースですか? –

+0

[dbm](https://pymotw.com/3/dbm/)を見ましたか?カウンターをキーとして使用することができれば、それはあなたのために働くことができますか? – fralau

答えて

0

メモリ内のデータ構造であるリストを使用して、メモリに格納するには大きすぎるデータを格納する必要があります。実際にはディスクベースのバッキングストアを持っているリストのようなインターフェイスを実際に扱っているときに、リストを使っているとふるまうことができるパッケージを求めています。それは便利で、ベンダー独自のデータベース(これは一般的ではない)のために、私が知っている少なくとも1つのファーストクラスの独自のAPIがあります。そして疑いなく誰かがどこかにデータベーステーブルへの一般的なリストのようなインターフェースを思いついたのですが、それは単に構文的な砂糖でしょう。私はあなたのリストのアプローチを放棄し、データベースAPIを学ばなければならないと思う。これはそのような勧告のフォーラムではありませんが、私はmysqlが無料で非常に良い評判を持っていると言って、炎上したり下降したりしないと思います。

関連する問題