Код не работает, пока выполняется другой

Я сделал бота в Телеграме, который принимает текст от пользователя и отправляет ему его в конкретное время. Также есть функция изменить этот текст, но бот не отвечает ни на какие команды, пока не наступит время и он не отправит свое сообщение. После этого он либо начинает отвечать, либо вообще перестает до перезапуска программы. Я думал, это можно решить многопоточностью и использовал модуль 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 шт):

Автор решения: A_Vaclav

Могу предложить такую идею: Сделать второго бота - ответчика. Первый бот попринимает сообщения и пишет в файл-очередь нужную инфу. Второй бот берет из очереди и обрабатывает. При таком разделении обязанностей первый бот освободится...

→ Ссылка
Автор решения: DisanD_08

ну я могу посоветовать вам библиотеку 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" переменные, то-есть название вы можете делать сами

Надеюсь хоть как-то смог вам помочь, удачи из ботом)

→ Ссылка