Я пытаюсь генерировать и возвращать боке графики.В этом процессе я использую многопроцессорную обработку Python, чтобы ускорить процесс, так как у меня есть большее количество графиков для генерации.
Ниже приведен пример того, как мой код выглядит ..
from multiprocessing import Pool
from bokeh.plotting import gridplot
class A():
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z
def generate_bokeh_plot(self, id):
# This method will generate and return bokeh plot
# Also, I am using above x, y, z in this method
# This is an example of how my plot looks like and I am returning this
plot = <class 'bokeh.plotting.figure.Figure'>
return plot
obj = A(x,y,z)
# Mine is 8 core machine, I am using 7 at a time
pool = pool(7)
plots = pool.map(obj.generate_bokeh_plot, id_list)
pool.close()
pool.join()
panel = gridplot(plots)
script, div = components(panel)
Для этого я получаю следующую ошибку
multiprocess.pool.MaybeEncodingError: Error sending result: '[Column(id='b80aa557-5157-4d5d-b891-236642b96abe', ...)]'. Reason: 'PicklingError("Can't pickle <class 'bokeh.core.enums.Enumeration'>: it's not the same object as bokeh.core.enums.Enumeration",)'
Я также пытался использовать пафос, в конечном итоге получаю ту же ошибку
import pathos.pools as pp
p = pp.ProcessPool(7)
p.map()
or
from pathos.multiprocessing import ProcessingPool as Pool
pool = Pool(7)
pool.map()
Моя среда: Я использую Python3.6 с веб-фреймворком Pyramid, RHEL
Любая помощь по этому вопросу будет принята с благодарностью:)