concurrent.futures作业从列表中删除自己 - &gt; <listcomp>中的IndexError

时间:2018-02-23 11:53:47

标签: python python-3.x multiprocessing list-comprehension concurrent.futures

我在尝试检索提交到流程池的期货结果时遇到了一个我无法解释的错误。我已经将未来的对象存储在一个列表中,我最好的猜测是以某种方式删除未来的对象引用,以便列表理解失败。

错误位于results = [j.result() for j in jobs]以下的async_jobs。追溯,

in <listcomp>
    results = [j.result() for j in jobs]
  File "lib/python3.6/concurrent/futures/_base.py", line 405, in result
    return self.__get_result()
  File "lib/python3.6/concurrent/futures/_base.py", line 357, in __get_result
    raise self._exception
IndexError: list index out of range

非MVCE代码

def _job(*args, **kwargs):
    """Does work with thread pool and returns True"""
    def _thread_job(*args,**kwargs):
        """Can define here because we are using threading and don't need to pickle"""
        ...
        return None

    with futures.ThreadPoolExecutor(max_workers=4) as t_executor:
        jobs = []
        for i in range(...):
            f = t_executor.submit(_thread_job, ..., ...)
            jobs.append(f)
        results = [j.results() for j in jobs]
    return True

def async_jobs():
    with futures.ProcessPoolExecutor(max_workers=8) as p_executor:
        jobs = []
        for i in range(...):
            f = p_executor.submit(_job, ..., ...)
            jobs.append(f)
        results = [j.result() for j in jobs]

if __name__=='__main__':
    async_jobs()

0 个答案:

没有答案