【发布时间】:2018-06-05 16:31:43
【问题描述】:
我构建了一个通过多线程(通过 Jupyter Notebook、python 2.7、anaconda)启动 XX 次的爬虫(worker)。 脚本采用以下格式,如 python.org 所述:
def worker():
while True:
item = q.get()
do_work(item)
q.task_done()
q = Queue()
for i in range(num_worker_threads):
t = Thread(target=worker)
t.daemon = True
t.start()
for item in source():
q.put(item)
q.join() # block until all tasks are done
当我按原样运行脚本时,没有问题。脚本完成后释放内存。
但是,我想运行上述脚本 20 次(批处理排序), 所以我把提到的脚本变成了一个函数,并使用下面的代码运行这个函数:
def multithreaded_script():
my script #code from above
x = 0
while x<20:
x +=1
multithredaded_script()
内存随着每次迭代而增加,最终系统开始将其写入磁盘。
有没有办法在每次运行后清除内存?
我试过了:
- 将所有变量设置为无
- 在每次迭代结束时设置
sleep(30)(以防内存释放需要时间)
似乎没有任何帮助。 关于在 While 语句中每次运行后我还可以尝试清除内存的任何想法? 如果没有,有没有更好的方法来执行我的脚本 XX 次,不会吃掉内存?
提前谢谢你。
【问题讨论】:
-
我还尝试导入垃圾收集模块( import gc gc.enable() ),并在每个工作函数运行后手动添加 gc.collect() ......没有骰子。
-
感谢您为我指明正确的方向(使用内存分析器)。这个包中的逐行分析看起来不错,但是由于某种原因我无法安装它。知道是否有其他软件包提供逐行内存分析?
标签: python multithreading memory-leaks jupyter-notebook