Concurrent Tasks Per NodeΒΆ
By default, each node creates one task at a time.
To spawn multiple, concurrent tasks from a node,
set max_tasks at add_node().
import asyncio
import time
from async_graph_data_flow import AsyncExecutor, AsyncGraph
async def node1():
for i in range(5):
yield i
async def node2(i):
await asyncio.sleep(2)
print(f"node2 received {i}")
yield
if __name__ == "__main__":
for max_tasks in (1, 5):
print(f"max_tasks: {max_tasks}")
graph = AsyncGraph()
graph.add_node(node1)
graph.add_node(
node2,
max_tasks=max_tasks,
)
graph.add_edge("node1", "node2")
print(f"Graph: {graph.nodes_to_edges}")
executor = AsyncExecutor(graph)
t1 = time.time()
executor.execute()
t2 = time.time()
print(f"execution time: {t2 - t1}")
print()
# Output:
# -------
# max_tasks: 1
# Graph: {'node1': {'node2'}, 'node2': set()}
# node2 received 0
# node2 received 1
# node2 received 2
# node2 received 3
# node2 received 4
# execution time: 10.004492044448853
#
# max_tasks: 5
# Graph: {'node1': {'node2'}, 'node2': set()}
# node2 received 0
# node2 received 1
# node2 received 2
# node2 received 3
# node2 received 4
# execution time: 2.001836061477661