Weil es vorher so einen Artikel gab. http://postd.cc/fast-scraping-in-python-with-asyncio/ Lassen Sie uns dies mit der neuen Python 3.5-Syntax tun.
Ah, der ursprüngliche Artikel hat HTML verschrottet, aber ich wollte auf eine URL zugreifen, die gleichzeitig eine ähnliche Antwortmenge zurückgibt, also habe ich mich für RSS entschieden. Oh, es kratzt überhaupt nicht. Nun, es ist das gleiche, was ich tue ...
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 = [] #Irgendwie eine Reihe von RSS-URLs. Ich habe ungefähr 10 Yahoo-Nachrichten gemacht
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
Ist es sicher einfacher zu lesen? Aber allein damit scheint es, dass derjenige, der mit dem Dekorateur gearbeitet hat und von dem er nachgibt, eine solche Syntax hatte. Bisher habe ich nichts mehr als das. Ist das erstaunlich?
Eher wie im Originalartikel verwende ich eine Bibliothek namens aiohttp, um den Kommunikationsteil asynchron zu machen, aber das ist sehr praktisch! Ich wusste es nicht! !! !!
Geschwindigkeitsvergleich mit demjenigen, der wegen des Problems kein Collout verwendet
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
Langsam! Das ist es!
Recommended Posts