Parce qu'il y avait un tel article avant. http://postd.cc/fast-scraping-in-python-with-asyncio/ Faisons cela avec la nouvelle syntaxe Python 3.5.
Ah, l'article original grattait du html, mais je voulais accéder à une URL qui retournait un nombre similaire de réponses en même temps, alors j'ai décidé d'utiliser RSS. Oh, ça ne gratte pas du tout. Eh bien, c'est la même chose que je fais ...
import asyncio
import aiohttp
import feedparser
import time
async def print_first_title(url):
response = await aiohttp.request('GET', url)
body = await response.text()
d = feedparser.parse(body)
print(d.entries[0].title)
rss = [] #En quelque sorte un tableau d'URL RSS. J'ai fait environ 10 actualités Yahoo
if __name__ == '__main__':
start = time.time()
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait([print_first_title(url) for url in rss]))
end = time.time()
print("{0} ms".format((end - start) * 1000))
390.4871940612793 ms
Eh bien, est-ce certainement plus facile à lire? Mais avec cela seul, il semble que celui qui faisait avec le décorateur et le rendement avait une syntaxe comme celle-là. Jusqu'à présent, je n'ai rien de plus. Est-ce incroyable?
Au contraire, comme l'article original, j'utilise une bibliothèque appelée aiohttp pour rendre la partie communication asynchrone, mais c'est très pratique! Je ne savais pas! !! !!
Comparaison de vitesse avec celui qui n'utilise pas de collout à cause du problème
import urllib.request
import feedparser
import time
def print_first_title(url):
response = urllib.request.urlopen(url)
body = response.read()
d = feedparser.parse(body)
print(d.entries[0].title)
rss = []
if __name__ == '__main__':
start = time.time()
[print_first_title(url) for url in rss]
end = time.time()
print("{0} ms".format((end - start) * 1000))
1424.4353771209717 ms
Lent! C'est tout!
Recommended Posts