可能有人解釋一下什麼是錯的下面的代碼使用帶生成器函數的python多處理模塊時出錯。
from multiprocessing import Pool
def sq(x):
yield x**2
p = Pool(2)
n = p.map(sq, range(10))
我收到以下錯誤
MaybeEncodingError Traceback (most recent call last) in() 5 p = Pool(2) 6 ----> 7 n = p.map(sq, range(10))
/home/devil/anaconda3/lib/python3.4/multiprocessing/pool.py in map(self, func, iterable, chunksize) 258 in a list that is returned. 259 ''' --> 260 return self._map_async(func, iterable, mapstar, chunksize).get() 261 262 def starmap(self, func, iterable, chunksize=None):
/home/devil/anaconda3/lib/python3.4/multiprocessing/pool.py in get(self, timeout) 606 return self._value 607 else: --> 608 raise self._value 609 610 def _set(self, i, obj):
MaybeEncodingError: Error sending result: '[, ]'. Reason: 'TypeError("can't pickle generator objects",)'
許多在此先感謝。
怎麼樣要慢得多改變產量以回報? – Shiping
我試圖避免存儲值。 – Manu
yield會嘗試保存該值,返回值只會返回值並忘記它。然而收益率不起作用。 – Shiping