使用多处理的Mayavi2 mlab可视化

时间:2016-03-17 19:32:12

标签: python parallel-processing visualization python-multiprocessing mayavi

我使用Mayavi2 mlab模块进行科学可视化。 有大约100k文件,我想要可视化并保存为图像,以便以后用gif动画组装它们。 为了加速这种可视化,我将使用多处理模块。 简单的例子如下。

from mayavi import mlab

def test_plot3d(dummy):
   mlab.options.offscreen = True
   l = mlab.plot3d([1,2], [1,2], [1,2])
   mlab.savefig(str(dummy)+".png")
   mlab.close()

from multiprocessing import Pool
NP = 2
pool = Pool(NP,maxtasksperchild=1)
res = pool.imap(test_plot3d,[x for x in xrange(0,4000)])
for r in res:
    print "OK"
print "FINISH"

当NP为2时,一切正常。 当NP> 2时,出现下一个错误:

[xcb] Unknown sequence number while processing queue [xcb] Most likely this is a multi-threaded client and XInitThreads has not been called

程序会生成一些图像,但它会挂在其他图像上,因此它永远不会完成。 谷歌告诉我,这是关于GTK和多线程的,但我指定maxtasksperchild for pool为1,这应该意味着每个进程一个任务,然后它将重新启动,并且每个进程只有一个mayavi实例(但是正如我所见,它不会发生。)

所以问题是如何正确启动并行mayavi可视化的进程池?

0 个答案:

没有答案