Я кодирую команду (/mc
, /
- это префикс) для моего бота разногласий, чтобы получить и сообщить результат. Но получение результата занимает много времени. Чтобы предотвратить множественные запросы одновременно, я поместил код получения результатов в отдельную функцию mainmc()
(не async
) и вызвал mainmc
как поток, создав новый класс mainThreadMC(threading.Thread)
для запуска потока, и создайте новый объект класса и запустите его, чтобы при множественном запросе команда выполнялась мгновенно, не дожидаясь предыдущего. Но вскоре после его запуска я обнаружил, что это невозможно, поскольку для отправки сообщения требуется await
, иначе это не будет работать. Но если у вас есть await
в функции, функция нуждается в async
. Это означает, что я должен отредактировать модуль threading
, чтобы он работал? И, конечно, это не способ сделать это. Но что мне делать?
Вот код (упрощенно):
class mainThreadMC(threading.Thread):
def __init__(self, threadID, name, ctx,args):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
self.args = args
self.ctx = ctx
def run(self):
logger.info("Starting " + self.name)
mainmc(self.ctx,self.args)
logger.info(f'Exiting {self.name}')
def mainmc(ctx,args):
# fetching data... creating / editing variable embed
ctx.send(embed=embed) #ERROR!!!!!!!!!!!
# finalize...
return
@bot.command(name='mc',pass_content=True)
async def mc(ctx,*,args=""):
global runno
threadMainMC = mainThreadMC(runno,f"MainMC_{str(runno)}",ctx,args)
threadMainMC.start()
(я просто хочу, чтобы это сработало, поэтому, если у вас есть альтернативные решения, вы также можете сказать мне.)
Спасибо за помощь.