系统在运行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。是除文件读取部分外的全部代码。好的,我将尝试在执行之前启动系统监视器。使用单核?不不穿线?不您的处理器是否处于活动状态?