python сделать синхронную функцию асинхронной
Есть долгая функция long_sync_func()
Как ее выполнить асинхронно, чтоб можно было это запустить в цикле событий?
Есть вариант сделать асинхронное выполнение через threading.Thread, но мне нужно, чтоб можно было применить await, например:
async def new_function():
# do smth
await make_function_async(long_sync_func)
# do smth
Вот как реализовать эту make_function_async?
UPD
Пришел на ум вот такой костыль, насколько так делать правильно?
import asyncio
from threading import Thread
class Runner(Thread):
def __init__(self, func, *args, **kwargs):
super().__init__()
self.func = func
self.args = args
self.kwargs = kwargs
def run(self):
self.result = self.func(*self.args, **self.kwargs)
async def make_async(func, *args, **kwargs):
r = Runner(func, *args, **kwargs)
r.start()
while r.is_alive():
await asyncio.sleep(0)