系统在运行python脚本时冻结

系统在运行python脚本时冻结,python,optimization,system,freeze,Python,Optimization,System,Freeze,我正在写一个多信号基线校正的代码。代码的结构是这样的 # 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\u als功能如下所示 def baseline_als(y, l

我正在写一个多信号基线校正的代码。代码的结构是这样的

# 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\u 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
def基线值(y、lam、p、niter=20):
L=len(y)
D=稀疏csc_矩阵(np.diff(np.eye(L),2))
w=np.ones(L)
对于X范围内的i(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

现在,当我将大约100个文件放在一个目录中时,代码运行良好,尽管这需要时间,因为复杂性相当高。但是当我的目录中有大约10000个文件,然后我运行这个脚本时,系统会在几分钟后冻结。我不介意延迟执行,但是脚本是否应该完成执行

通过使用
time.sleep(0.02)
,我能够防止CPU达到100%然后冻结。这需要很长时间,但仍然完成了执行


请注意,在使用此功能之前,您需要
导入时间。

在脚本中,当您在过多的文件上运行时,会消耗过多的RAM,请参阅

程序运行的进程将用于计算的数组和变量存储在进程内存(ram)中,并在内存中累积

一种可能的解决方法是在子进程中运行
baseline\u als()
函数。当子项返回时,内存将自动释放,请参阅

在子进程中执行函数:

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
抄袭自:

这样可以防止ram被进程(程序)生成的未引用的旧变量占用

另一种可能是调用垃圾收集器
gc.collect()
,但不建议这样做(在某些情况下不起作用)

更有用的链接:


当代码“冻结”时,您是否运行过任何类型的系统监视器?我不确定如何运行系统监视器。由于鼠标和键盘没有反应,我不得不重新启动。你不能说你使用的是哪种操作系统。在启动程序之前启动监视器。如果必须重新启动,则可能会发生其他情况。你展示了你的全部代码了吗?我正在使用ubuntu 14.04。是除文件读取部分外的全部代码。好的,我将尝试在执行之前启动系统监视器。使用单核?不不穿线?不您的处理器是否处于活动状态?