1. 程式人生 > >matplotlib畫圖時呼叫多執行緒關閉圖形顯示

matplotlib畫圖時呼叫多執行緒關閉圖形顯示

用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秒後自動退出。我們的目的也就達到了,程式裡面寫圖片顯示再也不用擔心影響後面程式運行了。