gpt4 book ai didi

python - 如何在 Python3 中检测 concurrent.futures 中的异常?

转载 作者:太空狗 更新时间:2023-10-29 21:07:02 24 4
gpt4 key购买 nike

由于它的并发 future 模块,我刚刚转向 python3。我想知道我是否可以让它检测错误。我想使用并发 future 来并行程序,如果有更高效的模块请告诉我。

我不喜欢多处理,因为它太复杂而且没有太多文档。但是,如果有人可以编写一个没有类的 Hello World,只有使用多处理并行计算的函数,这样它就很容易理解,那就太好了。

这是一个简单的脚本:

from concurrent.futures import ThreadPoolExecutor

def pri():
print("Hello World!!!")

def start():
try:
while True:
pri()
except KeyBoardInterrupt:
print("YOU PRESSED CTRL+C")


with ThreadPoolExecutor(max_workers=3) as exe:
exe.submit(start)

上面的代码只是一个演示,说明 CTRL+C 如何无法打印语句。

我想要的是能够在出现错误时调用函数。此错误检测必须来自函数本身。

另一个例子

import socket
from concurrent.futures import ThreadPoolExecutor
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
def con():
try:
s.connect((x,y))
main()
except: socket.gaierror
err()
def err():
time.sleep(1)
con()
def main():
s.send("[+] Hello")
with ThreadPoolExecutor as exe:
exe.submit(con)

最佳答案

聚会太晚了,但也许它会帮助其他人......

我很确定原来的问题没有得到真正的回答。人们对 user5327424 使用键盘中断引发异常这一事实感到困惑,而重点是未引发异常(无论它是如何引起的)。例如:

import concurrent.futures


def main():
numbers = range(10)

with concurrent.futures.ThreadPoolExecutor() as executor:
results = {executor.submit(raise_my_exception, number): number for number in numbers}


def raise_my_exception(number):
print('Proof that this function is getting called. %s' % number)
raise Exception('This never sees the light of day...')


main()

执行上面的示例代码时,您会看到屏幕上显示打印语句中的文本,但您永远不会看到异常。这是因为每个线程的结果都保存在 results 对象中。您需要迭代该对象以获取异常。以下示例显示了如何访问结果。

import concurrent.futures


def main():
numbers = range(10)

with concurrent.futures.ThreadPoolExecutor() as executor:
results = {executor.submit(raise_my_exception, number): number for number in numbers}

for result in results:
# This will cause the exception to be raised (but only the first one)
print(result.result())


def raise_my_exception(number):
print('Proof that this function is getting called. %s' % number)
raise Exception('This will be raised once the results are iterated.')


main()

我不确定我是否喜欢这种行为,但它确实允许线程完全执行,而不管在单个线程中遇到的异常。

关于python - 如何在 Python3 中检测 concurrent.futures 中的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33448329/

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