为了账号安全,请及时绑定邮箱和手机立即绑定

在多处理循环中捕获异常

在多处理循环中捕获异常

桃花长相依 2021-04-30 15:35:28
是否有可能在这样的可调用对象中捕获从循环引发的异常concurrent.futures.Executor?--with concurrent.futures.ThreadPoolExecutor(max_workers=num_cores) as executor:    futures = {executor.submit(self._process_ticket, i) for i in items}    concurrent.futures.wait(futures)我试图遍历列表中的数千个对象以执行任务,并且只是设置多处理以更快地处理它们。这很有效,但是由于我正在处理的对象for,在处理过程中可能会从循环中引发异常,并且由于正在调用concurrent.futures.Executor它而使我无法像以前捕获它那样捕获它。下面是一个简单的示例,说明了我之前是如何通过序列化过程捕获异常的。我必须创建一种解决方法,以强制迭代再次尝试处理该对象,并从该步骤继续进行,因为异常会导致循环停止:def task(self, items, step=None):    # items = [list,of,many,objects]    try:        for i in range(0 if step is None else step, len(items)):            with app.app_context():                ## do things with items[i]..    except Exception as e:        self.task(items, i)我基本上是想在循环被异常中断的情况下强制再次处理对象,并从该步骤继续执行循环。
查看完整描述

1 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

没关系,几天前就想到了这一点。不知道这是否是完成此任务的最佳/推荐方法,但似乎可以完成此工作:


with concurrent.futures.ThreadPoolExecutor(max_workers=num_cores) as executor:

    try:

        for i in range(step, len(items)):

            futures = {executor.submit(self.task, items[i])}

    except:

        self.task(items, i)


    concurrent.futures.wait(futures)

仍然开放征求意见/建议


查看完整回答
反对 回复 2021-05-11
  • 1 回答
  • 0 关注
  • 163 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信