Matplotlib在线程中多次运行时挂起

时间:2017-02-20 14:06:58

标签: python multithreading matplotlib

我有一个脚本链接显示为热图,虽然我注意到它只保存一次然后似乎停止保存。我再挖了一下,发现在它已经运行一次后它实际上从未完成。脚本完成了,所以我不明白为什么它应该失败。只是因为matplotlib.pyplot是一个问题,我尝试在函数开始时重新导入它,但它没有做任何事情。

以下是重现问题的一些代码:

import numpy as np
import matplotlib.pyplot as plt
from threading import Thread

def plot(data, save_path):
    print 1
    #gets stuck here
    plt.imshow(data)
    print 2
    plt.colorbar()
    print 3
    plt.title('test')
    print 4
    plt.savefig(save_path)
    print 5
    plt.close()
    print 6

w, h = 640, 480
heatmap = np.zeros(h * w)
heatmap = heatmap.reshape((h, w))
tl = Thread(target=plot, args=(heatmap, 'C:/Users/Peter/Python/test.png'))
tl.start()
tl.join()
t2 = Thread(target=plot, args=(heatmap, 'C:/Users/Peter/Python/test.png'))
t2.start()
t2.join()

结果是:

1
2
3
4
5
6
1

第二个挂起plt.imshow(data, cmap=cm)上的脚本。我该如何解决这个问题?如果它没有线程化,问题就会消失,但我更愿意将它保存在一个单独的线程中。

0 个答案:

没有答案