matplotlib画图时调用多线程关闭图形显示

版权声明:本博客内容为学习过程中的一些记录,大部分转载内容已标明转载,部分内容如有因疏忽未注明请与我联系,转载原创内容请注明链接,谢谢! 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秒后自动退出。我们的目的也就达到了,程序里面写图片显示再也不用担心影响后面程序运行了。

猜你喜欢

转载自blog.csdn.net/xiaodongxiexie/article/details/60778313