Mayavi2使用多处理的Mlab可视化

Дми*_*ков 5 python parallel-processing visualization mayavi python-multiprocessing

我正在使用Mayavi2 mlab模块进行一些科学可视化。我想将大约10万个文件可视化并另存为图像,以便稍后将它们组合到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"
Run Code Online (Sandbox Code Playgroud)

当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
Run Code Online (Sandbox Code Playgroud)

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

因此,问题是如何正确启动用于并行mayavi可视化的进程池?