版权声明:本博客内容为学习过程中的一些记录,大部分转载内容已标明转载,部分内容如有因疏忽未注明请与我联系,转载原创内容请注明链接,谢谢! https://blog.csdn.net/xiaodongxiexie/article/details/60778313
用matplotlib画图的都知道,当执行plt.show()
的时候,图形会一直显示(即使在ipython在–pylab模型下打开也需要手动叉掉进行关闭,或者在命令行输入plt.close()
,Jupyter notebook在%matplotlib inline模式下打开不需要,应该是内部调用了多线程。。。),如果我们在代码中写了plt.show()
,如果不执行将图形显示手动关掉,则无法进入到接下来的代码运行,这样如果演示代码运行,则每次都需要手动关闭,显然不是我们想要的效果,程序员怎么能手动去叉掉它呢,这个时候可以考虑多线程,在plt.show()
执行之前,先执行plt.close()
,调用time.sleep()
, 通过设置休眠时间,可以自动关闭图形显示。
为什么不开两个线程,同时执行plt.show()
和plt.close()
呢,其实用多线程的时候我也先是考虑的是两个线程同时启动,先show后close,但是会一直出错,像这样:
# -*- coding: utf-8 -*-
# @Author: xiaodong
# @Date: 2017-03-07 19:45:53
# @Last Modified by: xiaodong
# @Last Modified time: 2017-03-07 19:49:45
from time import sleep
from threading import Thread
from matplotlib import pyplot as plt
def show():
plt.plot(range(10))
plt.show()
def close(time):
sleep(time)
plt.close()
thread1 = Thread(target=close, args=(5,))
thread2 = Thread(target=show)
thread1.start()
thread2.start()
后来在公司同事的指导下,只对close()调用多线程,代码改动如下:
# -*- coding: utf-8 -*-
# @Author: xiaodong
# @Date: 2017-03-07 19:45:53
# @Last Modified by: xiaodong
# @Last Modified time: 2017-03-07 20:04:07
from time import sleep
from threading import Thread
from matplotlib import pyplot as plt
def show():
plt.plot(range(10))
plt.show()
def close(time):
sleep(time)
plt.close()
thread1 = Thread(target=close, args=(5,))
thread1.start()
show()
这个时候程序就可以完美运行了,图片显示5秒后自动退出。我们的目的也就达到了,程序里面写图片显示再也不用担心影响后面程序运行了。