我想通过多重处理来加快散景中人物的产生:
jobs = []
for label in list(peakLabels):
args = {'data': rt_proj_data[label],
'label': label,
'tools': tools,
'colors': itertools.cycle(palette),
'files': files,
'highlight': highlight}
jobs.append(args)
pool = Pool(processes=cpu_count())
m = Manager()
q = m.Queue()
plots = pool.map_async(plot_peaks_parallel, jobs)
pool.close()
pool.join()
def plot_peaks_parallel(args):
data = args['data']
label = args['label']
colors = args['colors']
tools = args['tools']
files = args['files']
highlight = args['highlight']
p = figure(title=f'Peak: {label}',
x_axis_label='Retention Time',
y_axis_label='Intensity',
tools=tools)
...
return p
尽管我遇到了这个错误:
MaybeEncodingError:发送结果出错:'[Figure(id ='1078',...)]'。原因:'PicklingError(“无法在0x7fc7df0c0ea0上进行酸洗:在bokeh.models.sources上的属性查找ColumnDataSource。失败”)'
我可以对对象p
做些什么,使其变为可腌制的吗?
单个散景对象不能单独进行序列化,包括pickle
。在Bokeh中进行序列化之前,最小的有意义的是Document
,它是Bokeh对象的特定集合,保证相对于以下参考文献是完整的。但是,如果pickle
与Document
一起使用,我会感到惊讶(自从项目开始以来,您是第一个问这个问题的人,它从来都不是优先事项,甚至我所了解的也没有)。相反,我建议您是否要执行此类操作,以使用Bokeh自己的JSON序列化功能,例如json_item
:
json_item
这将在p_serialized = json.dumps(json_item(p))
的上下文中正确地序列化p
。然后,您可以将其传递给页面模板,以使用Bokeh JS嵌入API进行显示:
Document