私は、テストクラス 'APMSim'を別のスレッドでインスタンス化して閉じる非常に簡単なテストフィクスチャを持っています。これが起こる可能性がなぜPythonマルチプロセッシングPool.imap throw ValueError:list.remove(x):xがリストにありません
Error
Traceback (most recent call last):
File "/home/peng/git/datapassport/spookystuff/mav/pyspookystuff_test/mav/__init__.py", line 87, in tearDown
self.sims
File "/usr/lib/python2.7/multiprocessing/pool.py", line 251, in map
return self.map_async(func, iterable, chunksize).get()
File "/usr/lib/python2.7/multiprocessing/pool.py", line 567, in get
raise self._value
:私は次のようなエラーが発生したunittestの私は、空のPythonを実行すると、
class APMSimFixture(TestCase):
def setUp(self):
self.pool = multiprocessing.Pool()
self.sims = self.pool.imap(
apmSimUp,
range(numCores)
)
def tearDown(self):
self.pool.map(
simDown,
self.sims
)
def test_empty(self):
pass
しかし:私は、プロセス間で転送され、それらを避けるためにPool.imapをマルチプロセッシングを使用する必要がありますか?これに修正がありますか?
ありがとうございました!しかし、これはマルチプロセッシングが不公平なライブラリであることも意味します。良いライブラリはエラー情報を隠さないでしょう – tribbloid
また、このブロックは何度も使用されていますので、私はそれを関数注釈にしたいと思いますが、関数のpicklabilityを失うことはありません。同時にエラー情報を表示しますか? – tribbloid
@tribbloid:完全なスタック情報を子から親に転送するのは自明ではありませんが、Py3では実際にそれを修正するかもしれません。 7歳のPythonを使用すると、より多くの癖があります。注釈ビットでちょっと騙して、その関数を引数としてラッパーに渡すことができます。 'mywrapper'は' realfunc、arg = args'、 'realfunc(arg)'を含む 'try'ブロックの本体をちょうど持つ' map(mywrapper、zip(itertools.repeat(realfunc)、origarguments)) ''です。 – ShadowRanger