Matplotlib和gevent猴子修补

时间:2016-01-11 05:47:54

标签: matplotlib thread-safety gevent monkeypatching ui-thread

我想了解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()

但我想知道它是否合理,如果没有则需要什么。

0 个答案:

没有答案