gpt4 book ai didi

python - 在多处理循环中捕获异常

转载 作者:太空宇宙 更新时间:2023-11-04 04:36:42 26 4
gpt4 key购买 nike

是否有可能捕获从 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)

我基本上是想在循环被异常中断的情况下强制再次处理一个对象,并从该步骤继续循环。

最佳答案

没关系,几天前就弄明白了。不确定这是否是完成这项工作的最佳/推荐方式,但它似乎可以完成工作:

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)

仍然欢迎建议/建议

关于python - 在多处理循环中捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51526263/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com