util.py
def exec_multiprocessing(self, method, args):
with concurrent.futures.ProcessPoolExecutor() as executor:
results = pool.map(method, args)
return results
clone.py
def clone_vm(self, name, first_run, host, ip):
# clone stuff
invoke.py
exec_args = [(name, first_run, host, ip) for host, ip in zip(hosts, ips)]
results = self.util.exec_multiprocessing(self.clone.clone_vm, exec_args)
以上代码出现了 pickling 错误。我发现原因是我们正在传递实例方法。因此,我们应该取消实例方法的封装。但我无法使其工作。
注意:我不能创建顶级方法来避免这种情况。我必须使用实例方法。
copy_reg.pickle
的调用。 - dano