首页 > 解决方案 > Asyncio 递归限制和最大线程处理

问题描述

我对 asyncio 很陌生,想知道我是否会遇到任何与 asyncio 相关的递归限制或线程限制,并使用以下函数。我的朋友认为使用 asyncio 进行递归看起来很奇怪,所以我想获得第二个意见。不担心任何递归函数中典型的最大递归深度异常,只是担心它如何与递归元素如何交互,因为每个循环都是异步的,因此也产生了新的协程。

async def walk_elements(context: 'Context', element, key_path: list = None):
    if key_path is None:
        key_path = []

    if isinstance(element, str):
        if some_condition(key_path[-1]):
            await do_something_else(context, element, key_path)
        return

    if isinstance(element, list):
        await asyncio.gather(*[walk_elements(
            context, v, key_path + [i.to_bytes(2, byteorder='big')]) 
            for i, v in enumerate(element)])

    if isinstance(element, dict):
        await asyncio.gather(*[walk_elements(
            context, v, key_path + [k]) for k, v in element.items()])

谢谢您的帮助!

标签: pythonrecursionpython-asyncio

解决方案


推荐阅读