1
我在joblib中使用Multiprocessing模塊。我正在編寫一個迭代算法,我需要在每次迭代時調用Parallel。我懷疑我在這裏遭受了很多開銷,因爲我在每次通話時都會創建並摧毀一批工作人員。python - joblib並行:使用「with」語句重用工作
joblib文檔對這種情況有一個參考。然而,該解決方案不會出現在Python 2.7版工作:
with Parallel(n_jobs=2) as parallel:
accumulator = 0.
n_iter = 0
while accumulator < 1000:
results = parallel(delayed(sqrt)(accumulator + i ** 2) for i in range(5))
accumulator += sum(results) # synchronization barrier
n_iter += 1
其產生的錯誤信息:
AttributeError: __exit__
另一個計算器後(Python Multiprocessing Lib Error (AttributeError: __exit__))有這樣提到的迴應是,在聲明Python 2.7需要一個上下文管理器。他們建議定義一個環繞並行調用的上下文管理器。我試過如下:
from contextlib import contextmanager, closing
@contextmanager
def terminating(fn):
try:
yield fn
finally:
fn.terminate()
with terminating(Parallel(n_jobs=2)) as parallel:
accumulator = 0.
n_iter = 0
while accumulator < 1000:
results = parallel(delayed(sqrt)(accumulator + i ** 2) for i in range(5))
accumulator += sum(results) # synchronization barrier
n_iter += 1
不過,我得到了以下錯誤消息:
AttributeError: 'Parallel' object has no attribute 'terminate'
有誰知道我怎麼能正確地在Python 2.7建立一個上下文管理器的並行?
謝謝,解決了這個問題!它在文檔中沒有提及它只是在最近的版本中。 – Adam