Последовательность 2 вызовов асинхронных функций в python - PullRequest
0 голосов
/ 25 апреля 2020

Вопрос: когда я вызываю generateCSVFromIncidentIdsWithArgs (list) дважды с двумя разными списками, скажем, «list1» и «list2», хотя первый ответ списка отображается правильно, второй ответ списка имеет результаты list1 также. Я не уверен, какую переменную нужно сбросить перед выполнением второго вызова, чтобы второй вызов списка отображался без смешивания результатов первого списка.

определение функции: функция извлекает ответ из URL с указанными в списке идентификаторами

   async def fetch(self, url, incident, session, csv):
        async with session.get(url) as response:
             self.format_output(incident, await response.read())


    async def bound_fetch(self, sem, url, incident, session, csv):
        # Getter function with semaphore.
        async with sem:
            await self.fetch(url, incident, session, csv)

    async def run(self, r, csv):
        url = self.conversations_url
        tasks = []
        # create instance of Semaphore
        sem = asyncio.Semaphore(1000)
        sslcontext = ssl.create_default_context(cafile=certifi.where())
        sslcontext.load_cert_chain('certificate.pem',
                           'plainkey.pem')

        # Create client session that will ensure we dont open new connection
        # per each request.
        async with ClientSession(connector=aiohttp.TCPConnector(ssl=sslcontext)) as session:
            for i in r:
                # pass Semaphore and session to every GET request
                task = asyncio.ensure_future(self.bound_fetch(sem, url + str(i), i, session, csv))
                tasks.append(task)

            responses = await asyncio.gather(*tasks)
            return responses

вызов функции:

def generateCSVFromIncidentIdsWithArgs(list):
    incident_list = list
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    future = asyncio.ensure_future(run(incident_list, True))
    loop.run_until_complete(future)


generateCSVFromIncidentIdsWithArgs(list1)
generateCSVFromIncidentIdsWithArgs(list2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...