懒惰的异步纯图遍历

问题描述

这个问题是关于一种具有生成器(如 python)和 haskell(本机懒惰)的语言。

我感兴趣的是:如果图形遍历同时是纯的、惰性的和异步的,它会是什么样子(get_neighbors 是异步的,所以一切都需要并行工作,而不是等待一个缓慢的节点。懒惰可以通过生成器或其他方式)。

我设法在 python 中编程的版本是异步的,但可以在每个节点上运行任意函数(不是真的很懒),但我无法让它与异步生成器一起工作并使其变得懒惰。如果没有访问节点的可变集,我也无法做到这一点(因为没有任何东西可以确保执行顺序)。

我的版本是这样的:

async def async_graph_traverse(mapper,root,visited,get_neighbors):
     if root in visited: return
     visited.add(root)
     mapper(root)
     neighbors = await get_neighbors(root)
     await asyncio.gather(async_graph_traverse(mapper,neighbor,get_neighbors) for neighbor in neighbors)

await async_graph_traverse(do_something_with_each_node,my_root,set(),my_get_neighbors)

我在想——

  1. 这是否可以在 Python 中以纯粹、懒惰和异步的方式完成?
  2. 如果没有,可以用 haskell 之类的东西来完成吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)