You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
trio-asyncio is a re-implementation of the asyncio mainloop on top of
Trio.
trio-asyncio requires at least Python 3.9. It is tested on recent versions of
3.9 through 3.13.
Rationale
Trio has native concepts of tasks and task cancellation. Asyncio is based
on callbacks and chaining Futures, albeit with nicer syntax, making
handling failures and timeouts fundamentally less reliable, especially in
larger programs. Thus, you really want to base your async project on Trio.
On the other hand, there are quite a few asyncio-enhanced libraries. You
really don't want to re-invent any wheels in your project.
Thus, being able to use asyncio libraries from Trio is useful.
trio-asyncio enables you to do that and more.
Transparent vs. explicit translation
trio_asyncio does not try to magically allow calling await
trio_code() from asyncio or vice versa. There are multiple reasons for
this; the executive summary is that cross-domain calls can't be made to
work correctly, and any such call is likely to result in an irrecoverable
error. You need to keep your code's asyncio and trio domains
rigidly separate.
Fortunately, this is not difficult.
Usage
Trio-Asyncio's documentation is too large for a README.
Like Trio, trio-asyncio is licensed under both the MIT and Apache licenses.
Submitting a patch or pull request implies your acceptance of these licenses.
Testing is done with pytest. Test coverage is pretty thorough; please
keep it that way when adding new code.