Skip to content

New event loop integration system #1371

Description

@davidbrochart

I would like to change our event-loop integration with Trio's guest mode. Trio's guest mode also works on asyncio thanks to aioguest. For it to work, we just need to have a function that can schedule a callback in the host event-loop in a thread-safe way.

  • in asyncio, that would be loop.call_soon_threadsafe(callback),
  • in tkinter, that would be tk.after(0, callback).
  • Qt supports Trio's guest mode, see here.
  • ...

For instance, here is how it looks like when the host event-loop is tkinter's:

from tkinter import Tk

from anyio import sleep
from anyioutils import start_guest_run


def run_sync_soon_threadsafe(fn):
    tk.after(0, fn)

def done_callback(outcome):
    print("done")

async def foo():
    for i in range(10):
        await sleep(0.1)
        print(i)

tk = Tk()
start_guest_run(foo, run_sync_soon_threadsafe=run_sync_soon_threadsafe, done_callback=done_callback)
tk.mainloop()

Before calling tk.mainloop(), we call start_guest_run() which runs foo as a task in tkinter's event-loop.

Thoughts?

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions