Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TrioExecutor acquires the capacity limiter too many times. #116

Open
1ekf opened this issue Sep 29, 2022 · 1 comment
Open

TrioExecutor acquires the capacity limiter too many times. #116

1ekf opened this issue Sep 29, 2022 · 1 comment

Comments

@1ekf
Copy link

1ekf commented Sep 29, 2022

TrioExecutor shares the limiter with the underlying trio.to_thread.run_sync call, so more tokens are consumed than are intended.

Reproducible example:

import asyncio
import trio_asyncio

async def amain():
    loop = asyncio.get_event_loop()
    executor = trio_asyncio.TrioExecutor(max_workers=1)
    await loop.run_in_executor(executor, print, "hello")

trio_asyncio.run(trio_asyncio.aio_as_trio(amain))

This call will always block, as TrioExecutor acquires the only token available and the inner trio.to_thread.run_sync cannot acquire its own token.

@1ekf
Copy link
Author

1ekf commented Sep 29, 2022

Since trio.to_thread.run_sync always acquires a token before spawning a thread, it seems sufficient to remove capacity limiter acquire/release in the TrioExecutor.submit implementation.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant