Обновление сеанса API при выполнении нескольких запросов - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь понять, как go мне следует обновлять сеанс api при выполнении нескольких запросов. В моем текущем подходе я использую asyncio.Event (), который, кажется, работает, за исключением того, что он замедляет мою программу. Если я удалю событие и просто позволю своим запросам завершиться ошибкой, а затем создам новый сеанс с каждым запросом, моя программа завершится примерно через 0,25 секунды. Я пытался найти способ остановить выполнение запросов, если текущий сеанс недействителен. Событие позволило остановить отправку всех запросов до тех пор, пока не будет создан новый сеанс, за исключением того, что теперь моя программа завершается примерно через 2,5 секунды. Я заметил кое-что, что при использовании события мой код, кажется, запускается последовательно после того, как событие установлено. Я заметил, что делается один запрос, а затем после небольшой задержки выполняется следующий запрос. Возможно, я ошибаюсь, поэтому я был бы признателен за любой совет о том, как мне подойти к этому типу проблемы.

Сначала я создаю свои задачи

    async def get_ids(self, queue, date, time_format):
        async with session:
        event = asyncio.Event()
        for interval in time_format:
            tasks.append((self.make_request(session, event, queue, interval))

        match_ids = await asyncio.gather(*tasks)

Затем, У меня есть функция make_request, в которой я использую событие.

async def make_request(self, session, event, queue, method):
    if not self.valid_session():
        if not self.refreshing:
            await self.create_session(session, event)
        else:
            await event.wait()
    
    async with session.get(url) as resp:
        response = await resp.json()
    
    return response

А вот моя функция создания сеанса

async def create_session(self, session, event):
    if not self.refreshing:
        self.refreshing = True
    
    url = self.create_url('createsession')
    async with session.get(url) as resp:
        response = await resp.json()
   
    if response['ret_msg'] == 'Approved':
        self.session_id = response['id']
        event.set()
        return True 
...