【发布时间】:2020-11-11 21:47:41
【问题描述】:
我想在我的机器上使用多个内核来评估一个 cloudpickle 对象(由 sympy 的 lambdify 创建)。下面是我正在尝试做的一个最小示例。
import sympy as sy
import cloudpickle
from joblib import Parallel, delayed
x, y = sy.symbols("x, y")
expr = sy.sin(x) + sy.cos(y)
expr_numpy = sy.lambdify((x, y), expr, modules="numpy")
with open('pickle_test/sample_pickle.pkl', 'wb') as f:
f.write(cloudpickle.dumps(expr_numpy))
with open('pickle_test/sample_pickle.pkl', 'rb') as f:
sample_pickle = cloudpickle.load(f)
def evaluate_pickle(x, y):
result = sample_pickle(x, y)
return x, y, result
trials = 10
value_x = np.random.uniform(0, 5, trials)
value_y = np.random.uniform(0, 5, trials)
Parallel(n_jobs=4)(delayed(evaluate_pickle)(value_x, value_y) for i in range(trials))
我收到以下错误:
joblib.externals.loky.process_executor.BrokenProcessPool: A task has failed to un-serialize. Please ensure that the arguments of the function are all picklable.
【问题讨论】:
标签: python-3.x pickle sympy joblib