我想了解gevent monkey修补如何影响matplotlib。
我正在使用matplotlib的子图在网格中显示一组图像。 这是直截了当的,但图像是远程存储的 并且网格足够大以使其变慢。
通常,解决这个问题的最简单方法是使用gevent monkey补丁,但我担心这会如何与matplotlib交互。
Matplotlib不是线程安全的,但是gevent monkey补丁应该使所有内容都是单线程的,将matplotlib事件队列转换为另一个协同程序。我不完全确定这已经足够了。
以下代码在没有任何可检测问题的情况下工作
import gevent
from gevent import pool
import gevent.monkey
gevent.monkey.patch_all()
g = pool.Group()
from pylab import *
import matplotlib.pyplot as plt
import cytoolz as tlz
import sys
from skimage import io
clusters = ... # nested list of URLs
R = max(map(len, clusters)
C = len(clusters)
def urlshow(ax, url):
ax.axis("off")
img = io.imread(url)
ax.imshow(img)
def urlsubplot(fig, r, c, url):
try:
ax = fig.add_subplot(R, C, c + C*r + 1)
urlshow(ax, url)
except e:
print >>sys.stderr, e
fig = plt.gcf()
fig.subplots_adjust(wspace=0, top=1.0, bottom=0.3, left=0, right=1.0)
for i, cl in enumerate(clusters):
for j, url in enumerate(cl):
g.spawn(urlsubplot, fig, j, i, np.random.choice(url))
g.join()
fig.show()
但我想知道它是否合理,如果没有则需要什么。