1
私はPythonでマルチプロセッシングをしています。あなたが「2」に印刷された数字を見ることができる場合ワーカープロセスの例外
def a(num):
if(num == 2):
raise Exception("num can't be 2")
print(num)
p = Pool()
p.map(a, [2, 1, 3, 4, 5, 6, 7, 100, 100000000000000, 234, 234, 5634, 0000])
出力
3
4
5
7
6
100
100000000000000
234
234
5634
0
multiprocessing.pool.RemoteTraceback:
"""
Traceback (most recent call last):
File "/usr/lib/python3.5/multiprocessing/pool.py", line 119, in worker
result = (True, func(*args, **kwds))
File "/usr/lib/python3.5/multiprocessing/pool.py", line 44, in mapstar
return list(map(*args))
File "<stdin>", line 3, in a
Exception: Error, num can't be 2
"""
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.5/multiprocessing/pool.py", line 260, in map
return self._map_async(func, iterable, mapstar, chunksize).get()
File "/usr/lib/python3.5/multiprocessing/pool.py", line 608, in get
raise self._value
Exception: Error, num can't be 2
:私は、労働者がその例外を発生させる場合、私は、次のコードを書いたhappendsかを判断しようとしていますそこにはありませんが、なぜナンバー1もそこにいませんか?
注:私はデフォルトではUbuntuの
12コアシステムで動作しているようです。 map()は、関数a()をリストの12個の項目に適用しますが、合計13個の項目がリストにあります。 '2'は例外を発生させるため、プログラムは '1'が処理される前に停止します。例外をラップして後で呼び出す方法については、[この回答](http://stackoverflow.com/a/26096355)を参照してください。 – pclrk
プールはそのようには機能しません。労働者の数はコアに関連しており、コア数はnと2nの間でなければなりません。あなたは 'map()'に非常に多くの項目を渡すことができます。プールは、 'chunksize' paramが設定されている場合にはworkerのparamsで呼び出しを分割し、そうでなければworkerから項目を選択し、' a() '関数を呼び出します。前の項目など。私が間違っている場合は教えてください –