Skip to content

Commit d6a02e5

Browse files
committed
[QI2-1509] Add run_async to qi2_shared
1 parent c4a0b00 commit d6a02e5

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

qi2_shared/utils.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import asyncio
2+
import concurrent
3+
from typing import Any, Coroutine
4+
5+
6+
def run_async(async_function: Coroutine[Any, Any, Any]) -> Any:
7+
try:
8+
_ = asyncio.get_running_loop()
9+
except RuntimeError:
10+
return asyncio.run(async_function)
11+
12+
with concurrent.futures.ThreadPoolExecutor() as executor:
13+
return executor.submit(asyncio.run, async_function).result()

tests/test_utils.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import asyncio
2+
3+
from qi2_shared.utils import run_async
4+
5+
6+
def test_async_run_no_loop() -> None:
7+
async def t_coro() -> None:
8+
await asyncio.sleep(1)
9+
10+
run_async(t_coro())
11+
12+
13+
def test_async_run_loop() -> None:
14+
async def t_coro() -> None:
15+
await asyncio.sleep(1)
16+
17+
async def main() -> None:
18+
run_async(t_coro())
19+
20+
asyncio.run(main())

0 commit comments

Comments
 (0)