ipython / ipython/ipykernel

New event loop integration system

Đang mở
#1,371 2 bình luận 0 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
Python
Star
734
Fork
412
Merge trung bình
1 ngày 5 giờ
Pull request đã merge (30 ngày)
8

Mô tả

I would like to change our event-loop integration with Trio's [guest mode](https://trio.readthedocs.io/en/stable/reference-lowlevel.html#using-guest-mode-to-run-trio-on-top-of-other-event-loops). Trio's guest mode also works on asyncio thanks to [aioguest](https://github.com/oremanj/aioguest/tree/master/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](https://doc.qt.io/qtforpython-6/examples/example_async_minimal.html).
- ...

For instance, here is how it looks like when the host event-loop is tkinter's:
```py
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?

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.