问题是您在实例中有一个无法拾取的实例变量(
namelist)
Book。因为您正在调用
pool.map实例方法,并且您正在Windows上运行,所以整个实例都必须是可腌制的,才能将其传递给子进程。
Book.namelist是一个打开的文件对象(
_io.BufferedReader),无法对其进行腌制。您可以通过两种方法解决此问题。根据示例代码,您似乎可以制作
format_char一个顶级函数:
def format_char(char): char = char + "a" return charclass Book(object): def __init__(self, arg): self.namelist = arg def format_book(self): self.tempread = "" charlist = [f.read() for f in self.namelist] #list of char with Pool() as pool: txtlist = pool.map(format_char,charlist) self.tempread = "".join(txtlist) return self.tempread
但是,实际上,如果您需要
format_char成为实例方法,则可以在腌制之前从实例中删除参数,从而使用
__getstate__/
__setstate__使其可腌制:
Book``namelist
class Book(object): def __init__(self, arg): self.namelist = arg def __getstate__(self): """ This is called before pickling. """ state = self.__dict__.copy() del state['namelist'] return state def __setstate__(self, state): """ This is called while unpickling. """ self.__dict__.update(state) def format_char(self,char): char = char + "a" def format_book(self): self.tempread = "" charlist = [f.read() for f in self.namelist] #list of char with Pool() as pool: txtlist = pool.map(self.format_char,charlist) self.tempread = "".join(txtlist) return self.tempread
只要您不需要
namelist在子进程中访问,就可以。



