Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用asyncio时,重新引发的异常的回溯长度正在增加_Python_Python Asyncio - Fatal编程技术网

Python 使用asyncio时,重新引发的异常的回溯长度正在增加

Python 使用asyncio时,重新引发的异常的回溯长度正在增加,python,python-asyncio,Python,Python Asyncio,在这种情况下,协同程序依赖于另一个协同程序。如果给定依赖项中发生异常,所有依赖项都应停止并记录回溯。然而,随着异常被重新引发,回溯变得越来越长 #编码:utf-8 导入异步 导入回溯 异步定义资源(): 返回7/0 异步def工作程序(依赖项): 打印('等待依赖项') 尝试: 等待依赖 例外情况除外,如e: 打印('Worker-crasted:\n'+traceback.format\u exc()) 异步def主(循环): 依赖项=循环。创建任务(资源()) workers=[loop.c

在这种情况下,协同程序依赖于另一个协同程序。如果给定依赖项中发生异常,所有依赖项都应停止并记录回溯。然而,随着异常被重新引发,回溯变得越来越长

#编码:utf-8
导入异步
导入回溯
异步定义资源():
返回7/0
异步def工作程序(依赖项):
打印('等待依赖项')
尝试:
等待依赖
例外情况除外,如e:
打印('Worker-crasted:\n'+traceback.format\u exc())
异步def主(循环):
依赖项=循环。创建任务(资源())
workers=[loop.create_任务(worker(dependency)),用于范围(4)内的u
return wait asyncio.wait(workers,loop=loop)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
loop=asyncio.get\u event\u loop()
循环。运行_直到_完成(主循环))
loop.stop()
loop.close()
对于第一次运行,回溯如下所示:

waiting on a dependency
Worker crashed:
Traceback (most recent call last):
  File "/home/slapec/scripts/sandbox/exc.py", line 13, in worker
    await dependency
  File "/home/slapec/.pyenv/versions/3.5.1/lib/python3.5/asyncio/futures.py", line 360, in __iter__
    return self.result()  # May raise too.
  File "/home/slapec/.pyenv/versions/3.5.1/lib/python3.5/asyncio/futures.py", line 274, in result
    raise self._exception
  File "/home/slapec/.pyenv/versions/3.5.1/lib/python3.5/asyncio/tasks.py", line 239, in _step
    result = coro.send(None)
  File "/home/slapec/scripts/sandbox/exc.py", line 7, in resource
    return 7 / 0
ZeroDivisionError: division by zero
    waiting on a dependency
Worker crashed:
Traceback (most recent call last):
  File "/home/slapec/scripts/sandbox/exc.py", line 13, in worker
    await dependency
  File "/home/slapec/.pyenv/versions/3.5.1/lib/python3.5/asyncio/futures.py", line 360, in __iter__
    return self.result()  # May raise too.
  File "/home/slapec/.pyenv/versions/3.5.1/lib/python3.5/asyncio/futures.py", line 274, in result
    raise self._exception
  File "/home/slapec/scripts/sandbox/exc.py", line 13, in worker
    await dependency
  File "/home/slapec/.pyenv/versions/3.5.1/lib/python3.5/asyncio/futures.py", line 360, in __iter__
    return self.result()  # May raise too.
  File "/home/slapec/.pyenv/versions/3.5.1/lib/python3.5/asyncio/futures.py", line 274, in result
    raise self._exception
  File "/home/slapec/scripts/sandbox/exc.py", line 13, in worker
    await dependency
  File "/home/slapec/.pyenv/versions/3.5.1/lib/python3.5/asyncio/futures.py", line 360, in __iter__
    return self.result()  # May raise too.
  File "/home/slapec/.pyenv/versions/3.5.1/lib/python3.5/asyncio/futures.py", line 274, in result
    raise self._exception
  File "/home/slapec/scripts/sandbox/exc.py", line 13, in worker
    await dependency
  File "/home/slapec/.pyenv/versions/3.5.1/lib/python3.5/asyncio/futures.py", line 360, in __iter__
    return self.result()  # May raise too.
  File "/home/slapec/.pyenv/versions/3.5.1/lib/python3.5/asyncio/futures.py", line 274, in result
    raise self._exception
  File "/home/slapec/.pyenv/versions/3.5.1/lib/python3.5/asyncio/tasks.py", line 239, in _step
    result = coro.send(None)
  File "/home/slapec/scripts/sandbox/exc.py", line 7, in resource
    return 7 / 0
ZeroDivisionError: division by zero
在第四次迭代之后,它是这样的:

waiting on a dependency
Worker crashed:
Traceback (most recent call last):
  File "/home/slapec/scripts/sandbox/exc.py", line 13, in worker
    await dependency
  File "/home/slapec/.pyenv/versions/3.5.1/lib/python3.5/asyncio/futures.py", line 360, in __iter__
    return self.result()  # May raise too.
  File "/home/slapec/.pyenv/versions/3.5.1/lib/python3.5/asyncio/futures.py", line 274, in result
    raise self._exception
  File "/home/slapec/.pyenv/versions/3.5.1/lib/python3.5/asyncio/tasks.py", line 239, in _step
    result = coro.send(None)
  File "/home/slapec/scripts/sandbox/exc.py", line 7, in resource
    return 7 / 0
ZeroDivisionError: division by zero
    waiting on a dependency
Worker crashed:
Traceback (most recent call last):
  File "/home/slapec/scripts/sandbox/exc.py", line 13, in worker
    await dependency
  File "/home/slapec/.pyenv/versions/3.5.1/lib/python3.5/asyncio/futures.py", line 360, in __iter__
    return self.result()  # May raise too.
  File "/home/slapec/.pyenv/versions/3.5.1/lib/python3.5/asyncio/futures.py", line 274, in result
    raise self._exception
  File "/home/slapec/scripts/sandbox/exc.py", line 13, in worker
    await dependency
  File "/home/slapec/.pyenv/versions/3.5.1/lib/python3.5/asyncio/futures.py", line 360, in __iter__
    return self.result()  # May raise too.
  File "/home/slapec/.pyenv/versions/3.5.1/lib/python3.5/asyncio/futures.py", line 274, in result
    raise self._exception
  File "/home/slapec/scripts/sandbox/exc.py", line 13, in worker
    await dependency
  File "/home/slapec/.pyenv/versions/3.5.1/lib/python3.5/asyncio/futures.py", line 360, in __iter__
    return self.result()  # May raise too.
  File "/home/slapec/.pyenv/versions/3.5.1/lib/python3.5/asyncio/futures.py", line 274, in result
    raise self._exception
  File "/home/slapec/scripts/sandbox/exc.py", line 13, in worker
    await dependency
  File "/home/slapec/.pyenv/versions/3.5.1/lib/python3.5/asyncio/futures.py", line 360, in __iter__
    return self.result()  # May raise too.
  File "/home/slapec/.pyenv/versions/3.5.1/lib/python3.5/asyncio/futures.py", line 274, in result
    raise self._exception
  File "/home/slapec/.pyenv/versions/3.5.1/lib/python3.5/asyncio/tasks.py", line 239, in _step
    result = coro.send(None)
  File "/home/slapec/scripts/sandbox/exc.py", line 7, in resource
    return 7 / 0
ZeroDivisionError: division by zero
虽然它不是真正的异步特定的,但我以前从未见过这种行为


你知道如何保持原始的追踪吗?我有一种感觉,堆栈帧也被存储,因此长时间运行的循环会消耗我所有的内存。

在python3.6中,回溯稍微短一些,但仍然可以包含等待相同依赖项的所有
wait
s。