2016-08-08 58 views
3

我跟進了本教程:https://pawelmhm.github.io/asyncio/python/aiohttp/2016/04/22/asyncio-aiohttp.html,當我做了50 000個請求時,一切正常。但是,我需要做的長槍1個API調用,然後我有問題,這樣的代碼:使用aiohttp/asyncio進行1千萬個請求 - 字面上

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 

因爲Python需要創建1個暢想任務,它基本上只是落後,然後打印在終端Killed消息。有沒有什麼方法可以使用由預先製作的(或列表)網址組成的發電機?謝謝。

+0

這不是信號量嗎?即使我將信號量設置爲10,我也會遇到延遲和「死亡」消息。 –

+0

我試圖從鏈接的例子,它的工作原理。就像作者說的那樣,大約11-12分鐘爲1000000個請求。我甚至調整了它與python3.4一起工作。在這裏工作。也許在其他地方你的代碼有其他問題。你能發佈整個代碼嗎? – roman

+0

您可以在程序被終止後發佈'dmesg'命令輸出和/或Python解釋器得到的完整錯誤。它應該是一個MemoryError。 – amirouche

回答

1

asyncio是內存綁定的(就像任何其他程序一樣)。你不能產生更多的內存可以容納的任務。我的猜測是你達到了內存限制。檢查dmesg以獲取更多信息。

1百萬RPS並不意味着有1M任務。任務可以在同一秒內完成多個請求。