【问题标题】:Python multiprocessing Pool.imap throws ValueError: list.remove(x): x not in listPython 多处理 Pool.imap 抛出 ValueError: list.remove(x): x not in list
【发布时间】:2016-10-15 05:35:40
【问题描述】:

我有一个非常简单的测试夹具,可以在不同的线程中实例化和关闭一个测试类“APMSim”,该类不可提取,所以我必须使用多处理 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 unittest 时,我遇到了以下错误:

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

为什么会发生这种情况?有解决办法吗?

【问题讨论】:

    标签: python python-2.7 python-multiprocessing python-unittest


    【解决方案1】:

    multiprocessing 正在从父进程中的工作函数/子进程重新引发异常,但它在从子进程到父进程的传输中丢失了回溯。检查你的工作函数,是那个代码出错了。采用您的工作人员功能并进行更改可能会有所帮助:

    def apmSimUp(...):
        ... body ...
    

    到:

    import traceback
    
    def apmSimUp(...):
        try:
            ... body ...
        except:
            traceback.print_exc()
            raise
    

    这会显式打印完整的原始异常回溯(然后让它正常传播),因此您可以看到真正的问题是什么。

    【讨论】:

    • 非常感谢!但这也意味着多处理是一个设计不当的库。好的库不会隐藏错误信息
    • 另外,由于这个块被使用了这么多次,我想把它做成一个函数注释,但是这样做会失去函数的可挑选性,有没有办法让它简洁并显示错误同时提供信息?
    • @tribbloid:将完整的堆栈信息从子级转发到父级并非易事,但我认为在 Py3 中它实际上可能会解决它;使用 7 年的 Python,你会得到更多的怪癖。您可以在注释位上作弊,然后将函数作为参数传递给包装器; map(mywrapper, zip(itertools.repeat(realfunc), origarguments)),其中mywrapper 仅包含try 块的主体,其中包含realfunc, arg = argsrealfunc(arg)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-23
    • 2021-11-03
    • 2022-06-28
    • 2022-06-11
    • 2020-07-11
    • 2022-12-17
    • 1970-01-01
    相关资源
    最近更新 更多