Код: Выделить всё
async def scrape(self, url, counter):
response = None
response_dict = {}
try:
proxy = "some proxy info"
impersonate_val = "chrome"
headers = {} # Setting up some headers
async with AsyncSession() as s:
response = await s.get(
url,
impersonate=impersonate_val,
proxies={'http': proxy, 'https': proxy},
headers=headers,
timeout=30
)
response_dict = {"response": response.text, "http_code": response.status_code}
except Exception as e:
response_dict = await self.scrape_url(url, counter + 1)
finally:
if response:
await response.aclose()
return response_dict
воспроизводимый скрипт выше вызывается с помощью ThreadPoolexeCutor, где каждый поток в пределах исполнителя связан с долгожданным асинхровым циклом. src = "https://i.sstatic.net/trhjt6ay.png"/>
Хотя утечки памяти в соответствии с Tracemalloc, я обнаружил, что больше запросов на сценарий привели к увеличению памяти кучи. Очищенный Python GC.
Поэтому я обновил свой сценарий, чтобы периодически запустить следующее: < /p>
ctypes.cdll("libc.so.6").malloc_trim(0)
Каждый раз, когда это работает, память показывает большой падение. Если нет входящих запросов, память возвращается к своему первоначальному состоянию, но в масштабе наблюдается падение, которое снова увеличивается сразу после того, как падение на любом уровне, память была на пике. Помимо или в дополнение к ctypes.cdll ("libc.so.6"). Malloc_trim (0) для обработки этой утечки?
Подробнее здесь: https://stackoverflow.com/questions/797 ... u-at-scale
Мобильная версия