[英]Python throws ValueError: list.remove(x): x not in list
[英]Python multiprocessing Pool.imap throws ValueError: list.remove(x): x not in list
我有一個非常簡單的測試裝置,可以在不同的線程中實例化並關閉測試類“ APMSim”,該類不可腌制,因此我必須使用multiprocessing Pool.imap以避免它們在進程之間轉移:
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
但是,當我運行空的Python單元測試時,遇到以下錯誤:
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
為什么會發生這種情況? 有解決辦法嗎?
multiprocessing
正在從父進程的工作函數/子進程中引發一個異常,但是在從子進程到父進程的傳輸中它失去了追溯。 檢查您的worker函數,這是代碼出了問題。 采取任何您的工作人員職能並進行更改可能會有所幫助:
def apmSimUp(...):
... body ...
至:
import traceback
def apmSimUp(...):
try:
... body ...
except:
traceback.print_exc()
raise
這將顯式打印完整的原始異常回溯(然后讓其正常傳播),因此您可以看到真正的問題是什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.