Hello, Tiago Thanks for the advice. I follow your instruction converting the iterative object into a python list as shown in global function 'find_multi_path(g,source,target)'. Then, everything works fine as the following. #!/usr/bin/env python2 # -*- coding: utf-8 -*- """ Created on Tue Jan 9 09:47:40 2018 """ import multiprocess as mp import graph_tool.all as gt import numpy as np g = gt.price_network(20, m = 2, directed = False) valid_paths = g.new_vertex_property("object") g.vertex_properties["valid_paths"] = valid_paths def find_multi_path(g,source,target): res = [] #distance = gt.shortest_distance(g=graph,source=g.vertex(source_index),target=g.vertex(dest_index),weights=delay) #paths = gt.all_paths(self.g,source=source_index,target=dest_index, cutoff = 5) #growth with the O(V!) paths = gt.all_shortest_paths(g,source = source, target = target) for p in paths: res.append(p) return res Cloudlet = [] Gateway = [] for v in g.vertices(): if np.random.rand() > 0.5: Cloudlet.append(v) else: Gateway.append(v) pool = mp.Pool(processes=4) for v in Gateway: valid_paths[v] = pool.map(lambda x: find_multi_path(g = g, source = g.vertex_index[v], target = x),[g.vertex_index[c] for c in Cloudlet]) *Nevertheless, the unpickled problem still exists as if I encapsulate the graph object into a class.* The following is an example. #!/usr/bin/env python2 # -*- coding: utf-8 -*- """ Created on Tue Jan 9 09:47:40 2018 """ import multiprocess as mp import graph_tool.all as gt import numpy as np def find_multi_path(g,source,target): res = [] #distance = gt.shortest_distance(g=graph,source=g.vertex(source_index),target=g.vertex(dest_index),weights=delay) #paths = gt.all_paths(self.g,source=source_index,target=dest_index, cutoff = 5) #growth with the O(V!) paths = gt.all_shortest_paths(g,source = source, target = target) for p in paths: res.append(p) return res class Network: def __init__(self): self.g = gt.price_network(20, m = 2, directed = False) self.Cloudlet = [] self.Gateway = [] self.valid_paths = self.g.new_vertex_property("object") self.g.vertex_properties["valid_paths"] = self.valid_paths def test(self): for v in self.g.vertices(): if np.random.rand() > 0.5: self.Cloudlet.append(v) else: self.Gateway.append(v) pool = mp.Pool(processes=4) for v in self.Gateway: self.valid_paths[v] = pool.map(lambda x: find_multi_path(g = self.g, source = self.g.vertex_index[v], target = x),[self.g.vertex_index[c] for c in self.Cloudlet]) n = Network() n.test() The Python compiler again says RuntimeError: Pickling of "graph_tool.libgraph_tool_core.Vertex" instances is not enabled (http://www.boost.org/libs/python/doc/v2/pickle.html) Wish you all the best, Percy -- Sent from: http://main-discussion-list-for-the-graph-tool-project.982480.n3.nabble.com/