eykd / owyl

A python behavior tree for implementing fast and flexible AI.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

AsyncIO compatibility

Gaboose opened this issue · comments

Running an Owyl tree and something else concurrently in the same application is only possible with threading right now.

There is a safer and more modern alternative - asyncio, which is in the standard library. Lots of libraries are already compatible with it. This can also be a good time to upgrade Owyl to Python3.

It helps a lot that Asyncio's code patterns are very similar to Owyl's:

@owyl.parent_task
def sequence(*children, **kwargs):
    final_value = True
    for child in children:
        result = yield child(**kwargs)
        if not result and result is not None:
            final_value = False
            break
    yield final_value

@asyncio.coroutine
def sequence(*children, **kwargs):
    for coroutine in children:
        result = yield from coroutine(**kwargs)
        if not result:
            return False
    return True