jupyter-lab: telethon. Выполнение методов вида "await telegram_client.send_message()" происходят в хаотичном порядке

Ненавижу асинхронность, она классная (с)

Дано:

  • Привет ребят. Практикуюсь в питон, осваиваю асинхронность
  • В магазине 5ка есть возможность пожаловаться на очередь через телеграм ks5_bot
  • GET запрос с телефона -> Flask (дев на jupyter-lab, прод на Heroku) -> Telethon отправка сообщения
  • ks5_bot_force_queue: в этой ф-ии сообщения 1-4 отправляются по разному день ото дня. Вчера - боту отправлялись сообщения 1-3. Сегодня - отправляется сообщение 1 или сообщения 1-2.
  • GET запрос возвращает разные ответы раз от раза. Т.е. отправляешь GET запрос с телефона, возвращает "Сообщение 1". Через секунду отправляешь снова - может вернуть "Сообщение 2"
  • Если убрать Flask, Ф-ю ks5_bot_force_queue и констр-ю async with TelegramClient, запустив все в одной ячейке jupyter-lab, то вчера все сообщения 1-4 доходили корректно. Сегодня - нет.

Подскажите:

  • Как добиться последовательной отправки всех 4 сообщений из telethon, при вызове из обработчика запроса Flask-сервера (или любого другого - еще не пробовал) на juputer-lab на windows (или на heroku - еще не пробовал)

  • как уменьшить интервал между получениями/отправкой(кликами) сообщений (вплоть до 13 секунд). Или, подтвердите что у вас на telethon удавалось проводить циклы получение/отправка(клик) сообщений без задержек - и если да, где (ядро питон, платформа, тип интерпретатора)

    # пишет в телеграм-бот 5ки по ускорению очереди    
    async def ks5_bot_force_queue(lat=60.545481, long=56.820507):
    
     # ЗАПУСК телеграм-клиента (код по получению параметров подключения опускаю)
     print ("=== initialaize TelegramClient ===")
     sys.stdout.flush()
     async with TelegramClient(StringSession(SESSION_STRING), API_ID, API_HASH) as client: 
    
         print ("=== starting TelegramClient ===")
         sys.stdout.flush()
         client.start()
         print ("=== TelegramClient started===")
         sys.stdout.flush()
    
    
         # Инициализация Главного меню бота 
         # https://fooobar.com/questions/18299291/how-do-you-make-the-python-bot-click-on-the-button-in-the-telegram-bot
         await client.send_message('@ks5_bot', 'Главное меню')
         messages = await client.get_messages('ks5_bot')
         await messages[0].click()
    
         # Сообщения ниже отправляются не в порядке их определения в коде (в т.ч. некоторые могут не отправляться)
         # однако вывод сообщ.на экран происходит в порядке определения в коде
         print("=== messages1 ===")
         sys.stdout.flush()
         messages1 = await client.get_messages('ks5_bot')
         await messages1[0].click() # жмем кнопку "ускорить очередь"
    
         print("=== messages2 ===")
         sys.stdout.flush()
         messages2 = await client.get_messages('ks5_bot')
         await messages1[0].click() # жмем кнопку "да" (вы в магазине?)
    
         print("=== messages3 ===")
         sys.stdout.flush()
         messages3 = await client.get_messages('ks5_bot')
         await messages1[0].click(share_geo=(lat, long)) # жмем кнопку "поделиться геопозицией"
    
         print("=== messages4 ===")
         sys.stdout.flush()
         messages4 = await client.get_messages('ks5_bot', limit=3)
         await messages4[2].click() # жмем кнопку с адресом конкретного магаза
         # вернули строку с адресом 1 (из 3) магазинов поблизости, которые предложил бот 
    

    return str(messages2.message)

server = Flask(name)

@server.route('/ks5_bot_gps', methods=['GET']) async def process_gps(): lat, long = request.args.get('lat', type=float), request.args.get('long', type=float) magaz = await ks5_bot_force_queue() return magaz

server.run(host='0.0.0.0', port=int(os.environ.get('PORT', 5000)))


Ответы (0 шт):