Skip to content

Instantly share code, notes, and snippets.

@managedkaos
Last active May 30, 2023 19:25
Show Gist options
  • Save managedkaos/8e46773b7a1fb801bba7112e7cd9638a to your computer and use it in GitHub Desktop.
Save managedkaos/8e46773b7a1fb801bba7112e7cd9638a to your computer and use it in GitHub Desktop.
Threaded API calls using Python.
Breed: terrier
Message: https://images.dog.ceo/breeds/terrier-australian/n02096294_1470.jpg
Status: success
HTTP Status Code: 200
------------------------
Breed: FAKE_DOG_1
Message: None
Status: None
HTTP Status Code: 404
------------------------
Breed: keeshond
Message: https://images.dog.ceo/breeds/keeshond/n02112350_7185.jpg
Status: success
HTTP Status Code: 200
------------------------
Breed: mix
Message: https://images.dog.ceo/breeds/mix/otis.jpg
Status: success
HTTP Status Code: 200
------------------------
Breed: maltese
Message: https://images.dog.ceo/breeds/maltese/n02085936_4070.jpg
Status: success
HTTP Status Code: 200
------------------------
Breed: ovcharka
Message: https://images.dog.ceo/breeds/ovcharka-caucasian/IMG_20191108_140150.jpg
Status: success
HTTP Status Code: 200
------------------------
Breed: boxer
Message: https://images.dog.ceo/breeds/boxer/n02108089_2718.jpg
Status: success
HTTP Status Code: 200
------------------------
Breed: briard
Message: https://images.dog.ceo/breeds/briard/n02105251_6138.jpg
Status: success
HTTP Status Code: 200
------------------------
Breed: FAKE_DOG_3
Message: None
Status: None
HTTP Status Code: 404
------------------------
Breed: FAKE_DOG_2
Message: None
Status: None
HTTP Status Code: 404
------------------------
Breed: FAKE_DOG_5
Message: None
Status: None
HTTP Status Code: 404
------------------------
Breed: appenzeller
Message: https://images.dog.ceo/breeds/appenzeller/n02107908_3119.jpg
Status: success
HTTP Status Code: 200
------------------------
Breed: malinois
Message: https://images.dog.ceo/breeds/malinois/n02105162_5307.jpg
Status: success
HTTP Status Code: 200
------------------------
Breed: cockapoo
Message: https://images.dog.ceo/breeds/cockapoo/Guri8.jpg
Status: success
HTTP Status Code: 200
------------------------
Breed: FAKE_DOG_4
Message: None
Status: None
HTTP Status Code: 404
------------------------
import threading
import requests
from queue import Queue
breeds = [
"appenzeller",
"boxer",
"briard",
"cockapoo",
"keeshond",
"malinois",
"maltese",
"mix",
"ovcharka",
"terrier",
"FAKE_DOG_1",
"FAKE_DOG_2",
"FAKE_DOG_3",
"FAKE_DOG_4",
"FAKE_DOG_5",
]
def get_dog_info(breed, results):
message, status, http_code = None, None, None
try:
url = f"https://dog.ceo/api/breed/{breed}/images/random"
response = requests.get(url)
http_code = response.status_code
if response.ok:
data = response.json()
message = data["message"]
status = data["status"]
except Exception as e:
f_message = f"An error occurred while fetching data for breed '{breed}': {str(e)}"
print(f_message)
message = f_message
results.put((breed, message, status, http_code))
# Create a queue to store the results
results_queue = Queue()
# Create a list to hold the thread objects
threads = []
# Create and start a thread for each breed
for breed in breeds:
thread = threading.Thread(target=get_dog_info, args=(breed, results_queue))
thread.start()
threads.append(thread)
# Wait for all threads to complete
for thread in threads:
thread.join()
# Process the results from the queue
results = []
while not results_queue.empty():
results.append(results_queue.get())
# Print the results
for breed, message, status, http_code in results:
print(f"Breed: {breed}")
print(f"Message: {message}")
print(f"Status: {status}")
print(f"HTTP Status Code: {http_code}")
print("------------------------")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment