diff --git a/bot.py b/bot.py index c96322b..bb70310 100644 --- a/bot.py +++ b/bot.py @@ -19,6 +19,8 @@ import random import re import shutil import sys +import functools +import typing from datetime import datetime from logging import handlers from pathlib import Path, PurePath @@ -808,7 +810,13 @@ async def get_stats(ctx, history_limit): yield name, how_many -# trunk-ignore(pylint/R0914) +async def run_blocking(blocking_func: typing.Callable, *args, **kwargs) -> typing.Any: + """Runs a blocking function in a non-blocking way""" + func = functools.partial(blocking_func, *args, **kwargs) # `run_in_executor` doesn't support kwargs, `functools.partial` does + return await client.loop.run_in_executor(None, func) + + +# runk-ignore(pylint/R0914) # trunk-ignore(pylint/R0915) # trunk-ignore(pylint/R0912) async def wyszukaj(ctx, how_many=0, slowa_kluczowe=None): @@ -1310,7 +1318,7 @@ async def zagraj_mi_kawalek(ctx): async with ctx.typing(): search_time_glob = datetime.now() logger.info("Zaczynam szukać timestamp %s", datetime.now()) - file = await wyszukaj(ctx=ctx) + file = await run_blocking(wyszukaj, ctx=ctx) logger.info( "Koniec szukania(timestamp %s zajęło %s", datetime.now(), @@ -1360,7 +1368,7 @@ async def zrob_mi_plejliste(ctx): search_time_glob = datetime.now() dlugosc_playlisty = ctx.message.content.split()[1] - file = await wyszukaj(ctx=ctx, how_many=dlugosc_playlisty) + file = await run_blocking(wyszukaj, ctx=ctx, how_many=dlugosc_playlisty) logger.info( "Koniec szukania(timestamp %s zajęło %s", datetime.now(), @@ -1597,7 +1605,7 @@ async def zagraj_muzyke_mego_ludu(ctx): async with ctx.typing(): logger.info("Zaczynam szukać timestamp %s", datetime.now()) search_time_glob = datetime.now() - file = await wyszukaj(ctx=ctx, how_many=MUZYKA_MOJEGO_LUDU_PLAJLISTA, slowa_kluczowe=final_key_words) + file = await run_blocking(wyszukaj, ctx=ctx, how_many=MUZYKA_MOJEGO_LUDU_PLAJLISTA, slowa_kluczowe=final_key_words) logger.info("Zagraj muzyke mego ludu:wygenerowano plejliste") logger.info(file) logger.info(