0

Итак, дабы раз и навсегда разобраться с этим: задам вопрос еще раз.
Прочитав, все равно непонятно каким образом надо писать тех же ботов.
Если

Асинхронность (asynchrony) подразумевает, что операция может быть выполнена кем-то на стороне: удаленным веб-узлом, сервером или другим устройством

То это абсолютно ломает мои познания в асинхронности питона, ведь читал я о ней абсолютно другие вещи.

Итак. Возьмем практический пример: У меня есть бот для ВКонтакте на чистом питоне. Обмен информации идет через CallBack API. При получении сообщения оно кладется в статическую переменную:

if data['secret'] == environ['secret_key']:
   payload = None
if data['object'].get('payload'):
   payload = json.loads(data['object']['payload'])['button']
StaticData.stack_messages.append({'message': data['object']['text'], 'user_id': data['object']['from_id'],'payload': payload})
StaticData.new_message_trigger.set()
return 'ok'

После складирования активируется триггер StaticData.new_message_trigger.set() и после все действия происходят в основном хэндлере:

@staticmethod
def handle() -> None:
    logging.info('Messages handler started')
    while True:
        try:
            vk = BotAPI()
            IDB = InternalDB()
            StaticData.new_message_trigger.wait() # Ждем изменения состояния триггера
            StaticData.new_message_trigger.clear() # Состояние изменилось, очищаем его
        data = StaticData.stack_messages.pop(0) # Получаем проброшенное через статику сообщение
        # Other actions...

Сама архитектура кажется мне очень запутанной и неправильной. Так ли это? Если да, то как хоть примерно преобразовать это в асинхронную структуру?

icYFTL
  • 1,662
  • 1
    Ответ про Java, но наверняка почитать вам его будет интересно. – Sergey Gornostaev Jul 06 '20 at 17:13
  • @SergeyGornostaev, Многопоточность джавы понятно, а вот с асихнронностью. Вообще она в разных яп по разному существует. Обожаю асихнронность в JS, но ненавижу в Питоне. – icYFTL Jul 06 '20 at 17:46
  • Асинхронность везде одинаковая - кооперативная многозадачность с переключением контекста на вводе/выводе. Разница только в нюансах реализации. – Sergey Gornostaev Jul 06 '20 at 17:48
  • Асинхронность далеко не всегда подразумевает "выполнение на стороне". https://ru.stackoverflow.com/questions/445768/%d0%9c%d0%bd%d0%be%d0%b3%d0%be%d0%bf%d0%be%d1%82%d0%be%d1%87%d0%bd%d0%be%d0%b5-vs-%d0%b0%d1%81%d0%b8%d0%bd%d1%85%d1%80%d0%be%d0%bd%d0%bd%d0%be%d0%b5-%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%bc%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5/1534872#1534872 – ibarbylev Aug 08 '23 at 12:59

0 Answers0