2 votes

comment utiliser asyncio et multiprocess.map pour obtenir des données

J'utilise asyncio pour obtenir la page web.

Cependant, la vitesse n'est pas très élevée.

Voici le code :

async def get_page_url(url, session):
    res = await session.request(method="GET", url=url)
    return await res.text()

async def main_get_page_url(urls):      
    async with ClientSession() as session:
    tasks = [get_page_url(url, session) for province, url in urls]
    result = await asyncio.gather(*tasks)
    return result

if __name__ == '__main__':
    urls = ['http://www.cnn.com', 'http://www.bbc.com']
    loop = asyncio.ProactorEventLoop()
    asyncio.set_event_loop(loop)
    loop = asyncio.get_event_loop()
    df = loop.run_until_complete(main_get_page_url(urls))

Je veux utiliser multiprocessing.pool et la carte pour augmenter la vitesse.

J'ai fait des recherches sur le web mais je n'ai pas trouvé de bonne méthode.

Comment modifier le code ?

Une autre meilleure approche ?

Merci beaucoup.

1voto

germn Points 1316

Vous ne parviendrez à rien en utilisant davantage de processus. 99% du temps d'exécution du script prend les E/S du réseau que vous gérez déjà en utilisant asyncio.gather . Seulement 1% du temps utilise le CPU. L'optimiser ne vaut déjà pas la peine d'investir du temps et d'augmenter la complexité du code. Si le coût de la création de plusieurs processus peut plutôt ralentir votre script.

Si vous pensez que votre code s'exécute plus lentement qu'il ne devrait, vous devriez trouver un goulot d'étranglement en premier lieu et essayer de l'optimiser. Je ne peux pas vous aider beaucoup plus sans un exemple entièrement reproductible avec du code réel, des urls et des mesures de temps.


Avis de non-responsabilité :

99% du temps d'exécution du script prend des E/S réseau

C'est une approximation très grossière, mais c'est juste, jetez un coup d'œil à cette réponse et surtout aux résultats à la toute fin de celle-ci.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X