我假設你在談論收到此錯誤:
hello function
Process Process-1:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/usr/local/lib/python2.7/multiprocessing/process.py", line 114, in run
self._target(*self._args, **self._kwargs)
File "mp2.py", line 8, in f
dict['process_obj'] = multiprocessing.current_process()
File "<string>", line 2, in __setitem__
File "/usr/local/lib/python2.7/multiprocessing/managers.py", line 758, in _callmethod
conn.send((self._id, methodname, args, kwds))
PicklingError: Can't pickle <type 'instancemethod'>: attribute lookup __builtin__.instancemethod failed
(它通常是一個好主意,包括「我得到了什麼」和「我的預期得到,而不是」的問題)。
這裏的根本問題是,multiprocessing.current_process()
返回一個實例方法。實例方法不正確,並且multiprocessing
必須保存(pickle)並加載(unpickle)共享數據項以將其值從一個進程傳送到另一個進程。參見例如,Can't pickle <type 'instancemethod'> when using python's multiprocessing Pool.map()和Overcoming Python's limitations regarding instance methods。特別要注意第二個答案之一:找出一些發送/共享的狀態可能會更好,而不是整個實例。舉例來說,如果一個進程的ident
就足夠了,你可以這樣做:
dict['process_obj'] = multiprocessing.current_process().ident
工作正常。
非常感謝。身份證做了我的工作 – user1650865