python - 发生错误时如何重新执行 ThreadPoolExecutor 中的函数?
问题描述
我正在尝试python文档中的python示例代码。ThreadPoolExecutor
concurrent.futures
具体来说
import concurrent.futures
import urllib.request
URLS = ['http://www.foxnews.com/',
'http://www.cnn.com/',
'http://europe.wsj.com/',
'http://www.bbc.co.uk/',
'http://some-made-up-domain.com/']
# Retrieve a single page and report the URL and contents
def load_url(url, timeout):
with urllib.request.urlopen(url, timeout=timeout) as conn:
return conn.read()
# We can use a with statement to ensure threads are cleaned up promptly
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
# Start the load operations and mark each future with its URL
future_to_url = {executor.submit(load_url, url, 60): url for url in URLS}
for future in concurrent.futures.as_completed(future_to_url):
url = future_to_url[future]
try:
data = future.result()
except Exception as exc:
print('%r generated an exception: %s' % (url, exc))
else:
print('%r page is %d bytes' % (url, len(data)))
concurrent.futures.as_completed(future_to_url)
如果在循环内产生异常,如何重新向执行程序发送调用?基本上我只是想重试失败的工作。
我试过简单地调用类似的东西,executor.submit(...)
但它似乎不起作用。
欢迎任何建议,谢谢
解决方案
期货是在失败后实现的。失败是他们的价值。因此,您不能重新执行它们,您必须创建一个新的 Future。
由于您有 URL,您可以在错误处理程序上执行此操作,并且在 Futuresfuture_to_url
完成后,迭代添加到不同集合中的新 Futures。
推荐阅读
- html - 图像顶部的 Bootstrap 4 浅色叠加以使文本突出/看得更清楚
- vba - 将代码模块从加载项导出到普通模板
- r - 如何在具有多个列表的数据集中准确地省略(负子集)项目?
- c - 怎么处理
- r - 使用带有矩阵的 For 循环优化 R 代码
- bash - Linux 目录权限
- xcode - Cmake 在 Mac OS 10.13 和 Xcode 9.2 上失败(文件是为不受支持的文件格式构建的)
- r - R:将文本值的向量保存到 .txt 文件中(向量的每个元素到单独的 .txt 文件中)
- html - 我的网站不会使用我的自定义表情符号字体(Noto Color Emoji),每个浏览器的行为不同。为什么?
- python - Webscraping - 遍历具有活动/非活动状态的表行