我最近看到一個關於如何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