簡體   English   中英

Python多重處理Pool.imap引發ValueError:list.remove(x):x不在列表中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM