试着把程序拆开执行,中间结果先保存,然后合并再执行下一步。
~~~~~~~~~~~~
这是你的原来的代码
for x in range(len(innerlayerlist)):
for k in range(len(blocknumlist)):
for i in range(len(batchsizelist)):
TrainList = []
TestList = []
TrainList,TestList = core(curseedlist,trainData,TrainList,TestList,\
batchsizelist[i],blocknumlist[k],innerlayerlist[x])
f=open(txtName, "a+")
f.write(str(TrainList)+'\n'+str(TestList)+'\n\n')
f.close()
del TrainList
del TestList
del f
你把最内核的部分:
TrainList = []
TestList = []
TrainList,TestList = core(curseedlist,trainData,TrainList,TestList,\
batchsizelist[i],blocknumlist[k],innerlayerlist[x])
f=open(txtName, "a+")
f.write(str(TrainList)+'\n'+str(TestList)+'\n\n')
f.close()
del TrainList
del TestList
del f
做成个单独的python函数。
前面加上命令行传参代码,入口参数就是batchsizelist[i],blocknumlist[k],innerlayerlist[x]具体的值。
你这个core函数看起来设计的不是很好:
curseedlist,trainData 这两个看起来永远不变,每次传进去没必要
,TrainList,TestList 这两个初值永远是 [],也没必要传进去
这两点可以优化下。
然后原来的程序改为多进程程序,我随便搜了个参考代码
(没错,我啥也记不住,整天抄代码,也抄自己的):
from multiprocessing import Process
import os
# 子进程要执行的代码
def run_proc(name):
print 'Run child process %s (%s)...' % (name, os.getpid())
if __name__=='__main__':
print 'Parent process %s.' % os.getpid()
p = Process(target=run_proc, args=('test',))
print 'Process will start.'
p.start()
p.join()
print 'Process end.'
启动的子进程类似这样:
def run_proc(name):
print 'Run child process %s (%s)...' % (name, os.getpid())
这样你的核心函数就是个单独进程执行,不断创建,销毁,不用管它怎么处理内存了。
效率肯定低一些,但能执行。
如果你的算法允许并行,可以把写文件改为写数据库,多个进程并发。
具体代码你应该能完成了。