Код не работает, пока выполняется другой
Я сделал бота в Телеграме, который принимает текст от пользователя и отправляет ему его в конкретное время. Также есть функция изменить этот текст, но бот не отвечает ни на какие команды, пока не наступит время и он не отправит свое сообщение. После этого он либо начинает отвечать, либо вообще перестает до перезапуска программы. Я думал, это можно решить многопоточностью и использовал модуль threading, а модуль schedule для отправки в нужное время. Вот код:
def run_threaded(функция_отправки_текста_func):
функция_отправки_текста_thread = threading.Thread(target=функция_отправки_текста_func)
функция_отправки_текста_thread.start()
def начало_отсчета_времени():
getattr(schedule.every(), var.week_day).at(var.time).do(run_threaded, функция_отправки_текста)
while True:
schedule.run_pending()
time.sleep(1)
Бот нормально работает далеко не всегда. Как это решить можно?
Ответы (2 шт):
Могу предложить такую идею: Сделать второго бота - ответчика. Первый бот попринимает сообщения и пишет в файл-очередь нужную инфу. Второй бот берет из очереди и обрабатывает. При таком разделении обязанностей первый бот освободится...
ну я могу посоветовать вам библиотеку asyncio она мне помогла в такой проблеме
import asyncio
async def начало_отсчета_времени():
while True:
здесь ваш код
и для того, что бы 2 поток(этот) ждал 1 секунду, используйте await asyncio.sleep(1)
так же что бы использовать эту функцию(я использую):
test = asyncio.get_event_loop()
tasks = [test.create_task(начало_отсчета_времени())]
wait_tasks = asyncio.wait(tasks)
test.run_until_complete(wait_tasks)
test.close()
"test","tasks" и "wait_tesks" переменные, то-есть название вы можете делать сами
Надеюсь хоть как-то смог вам помочь, удачи из ботом)