8

Python2.7.2+でワーカーのマルチプロセッシングプールの使用法をテストするためのサンプルプログラムを書いています。

これは私がpythonubuntuインタープリターで書いたコードです

>>> from multiprocessing import Pool
>>> def name_append(first_name,last_name):
...     return first_name+" "+last_name
...

>>> from functools import partial
>>> partial_name_append=partial(name_append,'kiran')
>>> partial_name_append('acb')
'kiran acb'
>>> abc='kiran'

>>> pool=Pool(processes=4)
>>> pool.map(partial_name_append,abc)
['kiran k', 'kiran i', 'kiran r', 'kiran a', 'kiran n']
>>> pool.close()
>>> pool.join()

>>> pool.map(partial_name_append,abc)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/multiprocessing/pool.py", line 226, in map
    assert self._state == RUN
AssertionError

ピクルスエラーが発生した後、大きなデータセットのワーカーコードのプールを介して、小さな例を実行し、エラーが何であるかを理解しようとしています。

上記で機能したのに、同じステートメント'pool.map'が機能しない理由がわかりません。「プールマップ」を正しく実行したと思いますが、理由がわかりません。

このエラーは「PicklingError:ピクルスできません:属性ルックアップ組み込みの.functionが失敗しました」に関連していますか?

誰かが私を助けることができますか?

ありがとう

4

1 に答える 1

18

次のように入力しました。

>>> pool.close()

ドキュメントから:

選ぶ()

これ以上タスクがプールに送信されないようにします。すべてのタスクが完了すると、ワーカープロセスは終了します。

もちろん、あなたはもうプールを使うことができません、あなたはそれを閉じました。

于 2012-04-29T00:54:55.757 に答える