YardalGedal
@YardalGedal
yeah boy

Когда и как правильно использовать асинхронный возможноости Python?

Прочитал уже несколько десятков мануалов - так до меня и не дойдёт никак:

1) Когда в Tornado-корутинах следует использовать yield? В данный момент весь мой код работает без них (то есть, на сколько я понимаю, синхронно). В качестве примера, приведу этот класс:

class http_cb(tornado.web.RequestHandler):
    bots = {}

    def msg_to_event(self, cb): return (cb.get('id'), cb.get('date'), cb.get('user_id'), cb.get('user_id'), cb.get('body'), cb.get('attachments'))

    def md5(self, s): return md5(str(s).encode('utf-8')).hexdigest()
    
    @gen.coroutine
    def post(self, *args, **kwargs):
        bot_name, key = args
        if bot_name not in self.bots.keys(): self.write('bot not in bots list')
        else:
            POST = tornado.escape.json_decode(self.request.body)
            if self.md5('{}:{}'.format(bot_name, POST['group_id'])) != POST['secret']: self.write('invalid secret')
            else:
                if (POST['type'] == 'confirmation'): self.write(key)
                else:
                    if (POST['type'] == 'message_new') and (POST['object']['out'] == 0): r = self.bots[bot_name].f(self.msg_to_event(POST['object']))
                    if (POST['type'] == 'group_join'): r = {'peer_id': POST['object']['user_id'], 'message': 'Привет!'}
                    if (POST['type'] == 'group_leave'): r = {'peer_id': POST['object']['user_id'], 'message': 'Пока!'}
                    try:
                        if type(r) == dict:
                            self.bots[bot_name].send(r)
                            self.write('ok')
                    except Exception as e: print(e)


2) Когда в обычном асинхронном программировании следует использовать async перед функцией и await внутри? Когда происходят действия определенного типа (какого?) ?
  • Вопрос задан
  • 625 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы