在蜘蛛中通常使用这样的支柱:
async def crawl(future, client, pool):
futures = []
urls = await future
for request_future in asyncio.as_completed([request(client, url) for url in urls]):
parse_future = loop.run_in_executor(pool, parse, (await request_future))
futures.append(asyncio.ensure_future(crawl(parse_future, client, pool)))
if futures:
await asyncio.wait(futures)
一切都很好,但是当链接数量很多时,在执行对服务器的请求(请求)之后,结果将被保存,然后由线程池进行处理。
正是在存储时,消耗了大量的RAM(现在将近8 GB)。
是否可以以某种方式更改此设计,以便在请求之后立即将结果很好地处理或保存为一定数量(例如50),然后快速处理线程池。
那些。我需要将RAM消耗降低到可接受的水平,但又不能失去异步请求的好处