Skip to content

Instantly share code, notes, and snippets.

@gnilchee
Created September 4, 2017 05:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gnilchee/29688b592fc746a55cea92633da1de29 to your computer and use it in GitHub Desktop.
Save gnilchee/29688b592fc746a55cea92633da1de29 to your computer and use it in GitHub Desktop.
python3 concurrency example with blocking requests
#!/usr/bin/env python
import requests
my_urls = [
'https://google.com/',
'https://youtube.com/',
'https://facebook.com/',
'https://wikipedia.org/',
'https://yahoo.com/',
'https://reddit.com/',
'https://amazon.com/',
'https://github.com/',
'https://twitter.com',
'https://news.google.com/',
'https://instagram.com/',
'https://httpbin.org',
'https://linkedin.com/',
'https://netflix.com/',
'https://imgur.com/',
'https://ebay.com/',
'https://pornhub.com/',
'https://wordpress.com/',
'https://bing.com/',
'https://microsoft.com/'
]
def get_urls(url):
r = requests.get(url)
result = "{url} {status}".format(url=r.url, status=r.status_code)
return result
for url in my_urls:
print(get_urls(url))
#!/usr/bin/env python
import asyncio
import concurrent.futures
import requests
my_urls = [
'https://google.com/',
'https://youtube.com/',
'https://facebook.com/',
'https://wikipedia.org/',
'https://yahoo.com/',
'https://reddit.com/',
'https://amazon.com/',
'https://github.com/',
'https://twitter.com',
'https://news.google.com/',
'https://instagram.com/',
'https://httpbin.org',
'https://linkedin.com/',
'https://netflix.com/',
'https://imgur.com/',
'https://ebay.com/',
'https://pornhub.com/',
'https://wordpress.com/',
'https://bing.com/',
'https://microsoft.com/'
]
async def main():
with concurrent.futures.ThreadPoolExecutor(max_workers=20) as executor:
loop = asyncio.get_event_loop()
futures = [
loop.run_in_executor(
executor,
requests.get,
url
)
for url in my_urls
]
for response in await asyncio.gather(*futures):
print("{url} {status}".format(url=response.url, status=response.status_code))
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
@gnilchee
Copy link
Author

gnilchee commented Sep 4, 2017

root@17397ecb8bd4:~# time ./get_urls.py
https://www.google.com/ 200
https://www.youtube.com/ 200
https://www.facebook.com/ 200
https://www.wikipedia.org/ 200
https://www.yahoo.com/ 200
https://www.reddit.com/ 429
https://amazon.com/ 503
https://github.com/ 200
https://twitter.com/ 200
https://news.google.com/news/?ned=us&hl=en 200
https://www.instagram.com/ 200
https://httpbin.org/ 200
https://www.linkedin.com/ 200
https://www.netflix.com/ 200
https://imgur.com/ 200
https://www.ebay.com/ 200
https://www.pornhub.com/ 200
https://wordpress.com/ 200
https://www.bing.com/ 200
https://www.microsoft.com/en-us/ 200

real	0m14.894s
user	0m0.720s
sys	0m0.100s
root@17397ecb8bd4:~# time ./get_urls_fast.py
https://www.google.com/ 200
https://www.youtube.com/ 200
https://www.facebook.com/ 200
https://www.wikipedia.org/ 200
https://www.yahoo.com/ 200
https://www.reddit.com/ 429
https://amazon.com/ 503
https://github.com/ 200
https://twitter.com/ 200
https://news.google.com/news/?ned=us&hl=en 200
https://www.instagram.com/ 200
https://httpbin.org/ 200
https://www.linkedin.com/ 200
https://www.netflix.com/ 200
https://imgur.com/ 200
https://www.ebay.com/ 200
https://www.pornhub.com/ 200
https://wordpress.com/ 200
https://www.bing.com/ 200
https://www.microsoft.com/en-us/ 200

real	0m2.052s
user	0m0.640s
sys	0m0.210s

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment