2016-07-01 4 views
2

私は、複数の信号のベースライン補正のコードを書いています。コードの構造は次のとおりです。pythonスクリプトの実行時にシステムがフリーズする

# for each file in a directory 
    #read file and populate X vector 
    temp = baseline_als(x,1000,0.00001) 
    plt.plot(x-temp) 
    plt.savefig("newbaseline.png") 
    plt.close() 

baseline_alsの機能は以下の通りです。

def baseline_als(y, lam, p, niter=20): 
     L = len(y) 
     D = sparse.csc_matrix(np.diff(np.eye(L), 2)) 
     w = np.ones(L) 
     for i in xrange(niter): 
      W = sparse.spdiags(w, 0, L, L) 
      Z = W + lam * D.dot(D.transpose()) 
      z = spsolve(Z, w*y) 
      w = p * (y > z) + (1-p) * (y < z) 
     return z 

ディレクトリに約100個のファイルを置くと、コードはうまく動作しますが、複雑さは非常に高いので時間がかかります。しかし、ディレクトリに約10000個のファイルがあり、このスクリプトを実行すると、数分後にシステムがフリーズします。私は実行の遅れは気にしないが、とにかくスクリプトが実行を終了する必要がありますか?

+0

は、コード "フリーズ" システムモニタの任意の並べ替えを実行することがありますか? – cdarke

+0

システムモニターを実行するにはどうすればよいかわかりません。マウスとキーボードが反応しなくなり、再起動する必要があります。 –

+1

使用しているオペレーティングシステムについては言及していません。プログラムを開始する前にモニターを始動してください。再起動が必要な場合は、何か他のことが起こっている可能性があります。あなたはあなたの全体のコードを見せましたか? – cdarke

答えて

0

time.sleep(0.02)を使用してCPUが100%に達してからフリーズするのを防ぐことができました。それにもかかわらず、長い時間がかかりますが、実行は完了します。

これを使用するには、import timeが必要です。あなたはファイルの大きすぎる数の上でそれを実行すると、スクリプトで

0

があまりにも多くのRAMを消費しているプログラムがプロセスメモリに計算のための店舗の配列や変数を走ることで、Why does a simple python script crash my system

プロセスを参照してくださいラムであり、それらが累積する

考えられる回避策は、子プロセスでbaseline_als()関数を実行することです。子供はメモリが自動的に解放されて戻ったとき、Releasing memory in Python

は、子プロセスで関数を実行参照してくださいからコピー

from multiprocessing import Process, Queue 

def my_function(q, x): 
q.put(x + 100) 

if __name__ == '__main__': 
queue = Queue() 
p = Process(target=my_function, args=(queue, 1)) 
p.start() 
p.join() # this blocks until the process terminates 
result = queue.get() 
print result 

:これでIs it possible to run function in a subprocess without threading or writing a separate file/script

あなたはラムが参照されていない古い変数によって消費されることを防ぐことあなたのプロセス(プログラム)が生成されます

もう一つの可能​​性はおそらくガベージコレクタgc.collect()を呼び出すかもしれませんが、これはお勧めしませんいくつかの例)

もっと便利なリンク:

memory usage, how to free memory

Python large variable RAM usage

I need to free up RAM by storing a Python dictionary on the hard drive, not in RAM. Is it possible?

関連する問題