2016-03-03 17 views
0

有時,我會循環更新一個情節。通常情況下,這可以正常工作,但是當循環中的處理花費很長時間時,除了這次的前10秒外,情節會「灰色」/睡眠。這可能很煩人,因爲它通常無法區分曲線(當然,我可以使用虛線,但是......)。我使用的是Ubuntu,約10秒是我開始發生的門檻。更新SLOW循環中沒有灰色漸變的現場情節

下面是一些重現問題的玩具代碼,以及一些圖片來演示會發生什麼。

有沒有簡單的方法來防止這種「灰白」行爲?

import numpy as np 
import pylab as p 
import time 

def create_data(i): 
    time.sleep(10) # INCREASE THIS VALUE TO MAKE THE PLOT GREY OUT WHILE IT WAITS 
    return np.sin(np.arange(i) * 0.1) 

def live_plot(y): 
    p.cla() 
    p.plot(y) 
    p.plot(y**2) 
    p.draw() 
    p.pause(0.01) 

for i in xrange(1000): 
    y = create_data(i) 
    live_plot(y) 

enter image description here

+0

可能值得一試,以在新線程中運行matplotlib的第一個調用... – dfb

回答

0

的問題是,GUI窗口變爲從窗口管理器的POV無響應,因此「有益」灰色出來告訴你這一點。在gnome/unity中可能會有一個設置(不確定你正在使用哪個)來禁用它。 (依賴於系統,也許是不可能的:()

一種解決方法是計算推到另一個線程/進程,這將允許您使用阻塞show離開GUI主循環響應。(復:()

另一種解決方案是在慢環週期性捅GUI循環。我想打電話fig.canvas.flush_events()應該足夠了。(髒:()

總之,圖形用戶界面(和一般的異步的東西)都很難得到正確。