我最近看到一个关于如何functions are objects in python的答案/评论。所以,我想知道为什么当我采用这个例子,并且在初始化一个变量时创建一个类时,它不会以相同的方式工作。 (该类示例收到酸洗错误): PicklingError: Can't pickle <type 'instancemethod'>: attribute lookup __builtin__.instancemethod failed
函数初始化和对象初始化(多处理)
有没有人知道这是为什么?从链路
示例代码:
import multiprocessing as mp
def f(x):
f.q.put('Doing: ' + str(x))
return x*x
def f_init(q):
f.q = q
def main():
jobs = range(1,6)
q = mp.Queue()
p = mp.Pool(None, f_init, [q])
results = p.imap(f, jobs)
p.close()
for i in range(len(jobs)):
print q.get()
print results.next()
if __name__ == '__main__':
main()
相同示例而puttin f
成类:
import multiprocessing as mp
class F:
def __init__(self, q):
self.q = q
def f(x):
self.q.put('Doing: ' + str(x))
return x*x
def main():
jobs = range(1,6)
q = mp.Queue()
p = mp.Pool(None)
f = F(q)
results = p.imap(f.f, jobs)
p.close()
for i in range(len(jobs)):
print q.get()
print results.next()
if __name__ == '__main__':
main()
,如果你用什么样的第二段具有不同的行为表示这将是有益的。 – cdhowie 2013-04-10 17:33:22
@cdhowie,感谢您的输入,我添加了一些信息。 – chase 2013-04-10 17:46:06