Что я делаю не так и как отлаживать утечки памяти с помощью Python asyncio? - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть такой код:

async def worker(self):
    while True:
        proxies = get_proxies()
        for proxy in proxies:
            await self.add_proxy_to_queue(proxy)

async def add_proxy_to_queue(self, proxy):
    while self.proxies_semaphore.locked():
        await asyncio.sleep(0.001)

    asyncio.ensure_future(self.process_proxy(proxy))

async def process_proxy(self, proxy):
    async with self.proxies_semaphore:
        # send network request and wait for the resposne with timeout

Я изменил его так:

async def worker(self):
    while True:
        proxies = get_proxies()
        for proxy in proxies:
            await self.add_proxy_to_queue(proxy)

async def add_proxy_to_queue(self, proxy):
    async with self.proxies_semaphore:  # <-- HERE ARE THE CHANGES
        asyncio.ensure_future(self.process_proxy(proxy))

async def process_proxy(self, proxy):
    async with self.proxies_semaphore:
        # send network request and wait for the resposne with timeout

и он все еще протекает, но гораздо медленнее.

Что я делаю не так и как отлаживать асинхронный код, как, скажем, заглянуть внутрь цикла обработки событий и увидеть, какие задачи на самом деле существуют?

...