def class_powder(self, event=None):
cnum = self.class_num.checkedId() - 1
if cnum == self.old_cnum:
powder = self.class_powder
elif cnum == -1:
powder = self.emc_reader.get_powder()
self.class_powder = powder
self.old_cnum = cnum
else:
points = np.where(self.classes.key_pos == cnum)[0]
num_proc = int(self.num_proc.text())
powders = multiprocessing.Array(ctypes.c_double, num_proc*self.parent.geom.mask.size)
pshape = (num_proc,) + self.parent.geom.mask.shape
print 'Calculating powder sum for class %s using %d threads' % (self.class_num.checkedButton().text(), num_proc)
jobs = []
for i in range(num_proc):
p = multiprocessing.Process(target=self.powder_worker, args=(i, points[i::num_proc], pshape, powders))
jobs.append(p)
p.start()
for j in jobs:
j.join()
sys.stderr.write('\r%d/%d\n'%(len(points), len(points)))
powder = np.frombuffer(powders.get_obj()).reshape(pshape).sum(0)
self.class_powder = powder
self.old_cnum = cnum
self.plot_frame(frame=powder)
评论列表
文章目录