Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

New event loop integration system

Open
#1,371 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
25/100
Issue type
Feature
Clarity
Needs clarification
Activity status
Stale
Tech stack
python
Domain
backend

Research direction

No repository file or test is identified in the issue. Start by reading the proposed start_guest_run entry point and the host-loop callback examples for asyncio, tkinter, and Qt; clarify which integration API and supported event loops are in scope before implementation. Done would mean an agreed design and working guest-mode integration.

Written by the indexing model from the issue text.

Description

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?

Dominant language
Python
Stars
734
Forks
411
Avg merge
1d 2h
Merged PRs (30d)
9

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from ipython/ipykernel

All issues in ipython/ipykernel

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.