2016-08-08 3 views
3

나는이 튜토리얼을 따라 갔다 : https://pawelmhm.github.io/asyncio/python/aiohttp/2016/04/22/asyncio-aiohttp.html 그리고 50 000 요청을 할 때 모든 것이 잘 작동한다. 하지만 1 milion API 호출을 할 필요가 다음이 코드에 문제가 :aiohttp/asyncio로 1 milion 요청하기 - 글자 그대로

url = "http://some_url.com/?id={}" 
    tasks = set() 

    sem = asyncio.Semaphore(MAX_SIM_CONNS) 
    for i in range(1, LAST_ID + 1): 
     task = asyncio.ensure_future(bound_fetch(sem, url.format(i))) 
     tasks.add(task) 

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

파이썬, 그것은 기본적으로 그냥 지연 1 개 milion 작업을 만들 필요가 다음 터미널에서 Killed 메시지를 출력하기 때문에. 사전 제작 된 (또는 목록) URL 생성기를 사용하는 방법이 있습니까? 감사.

+0

세마포어가 아닌가요? 세마포어를 10으로 설정하더라도 지연이 발생하고 "Killed"메시지가 표시됩니다. –

+0

링크에서 예를 시도했는데 작동합니다. 저자가 말했듯이, 100,000 요청에 대해 약 11-12 분. 파이썬 3.4에서도 작동하도록 조정했다. 여기에서 작동합니다. 어딘가 다른 곳에서 코드에 문제가 생길 수 있습니다. 전체 코드를 게시 할 수 있습니까? – roman

+0

프로그램이 죽은 후에'dmesg' 명령 출력을 게시하거나 파이썬 인터프리터가 얻은 전체 오류를 게시 할 수 있습니까? MemoryError 여야합니다. – amirouche

답변

1

asyncio는 (다른 프로그램과 마찬가지로) 메모리 바운드입니다. 메모리가 보유 할 수있는 작업을 더 많이 생성 할 수 없습니다. 내 추측으로는 메모리 한도에 도달했습니다. 자세한 정보는 dmesg를 확인하십시오.

1 백만 RPS가 1M 작업이 있다는 것을 의미하지 않습니다. 작업은 동일한 초에 여러 요청을 수행 할 수 있습니다.