from concurrent.futures import ThreadPoolExecutor, as_completed import json import os import time import numpy as np import requests import torch from clip_app_client import ClipAppClient test_image_url = "https://static.wixstatic.com/media/4d6b49_42b9435ce1104008b1b5f7a3c9bfcd69~mv2.jpg/v1/fill/w_454,h_333,fp_0.50_0.50,q_90/4d6b49_42b9435ce1104008b1b5f7a3c9bfcd69~mv2.jpg" english_text = ( "It was the best of times, it was the worst of times, it was the age " "of wisdom, it was the age of foolishness, it was the epoch of belief" ) app_client = ClipAppClient() preprocessed_image = app_client.preprocess_image(test_image_url) def _send_text_request(number): embeddings = app_client.text_to_embedding(english_text) return number, embeddings def _send_image_url_request(number): embeddings = app_client.image_url_to_embedding(test_image_url) return number, embeddings def _send_preprocessed_image_request(number): embeddings = app_client.preprocessed_image_to_embedding(preprocessed_image) return number, embeddings def process(numbers, send_func, max_workers=10): with ThreadPoolExecutor(max_workers=max_workers) as executor: futures = [executor.submit(send_func, number) for number in numbers] for future in as_completed(futures): n_result, result = future.result() print (f"{n_result} : {result.shape}") if __name__ == "__main__": n_calls = 300 # test text numbers = list(range(n_calls)) start_time = time.monotonic() process(numbers, _send_text_request) end_time = time.monotonic() total_time = end_time - start_time avg_time_ms = total_time / n_calls * 1000 calls_per_sec = n_calls / total_time print(f"Text...") print(f" Average time taken: {avg_time_ms:.2f} ms") print(f" Number of calls per second: {calls_per_sec:.2f}") # test image url numbers = list(range(n_calls)) start_time = time.monotonic() process(numbers, _send_image_url_request) end_time = time.monotonic() total_time = end_time - start_time avg_time_ms = total_time / n_calls * 1000 calls_per_sec = n_calls / total_time print(f"Image passing url...") print(f" Average time taken: {avg_time_ms:.2f} ms") print(f" Number of calls per second: {calls_per_sec:.2f}") # test image as vector numbers = list(range(n_calls)) start_time = time.monotonic() process(numbers, _send_preprocessed_image_request) end_time = time.monotonic() total_time = end_time - start_time avg_time_ms = total_time / n_calls * 1000 calls_per_sec = n_calls / total_time print(f"Preprocessed image...") print(f" Average time taken: {avg_time_ms:.2f} ms") print(f" Number of calls per second: {calls_per_sec:.2f}") # from concurrent.futures import ThreadPoolExecutor # import json # import os # import numpy as np # import requests # from concurrent.futures import ThreadPoolExecutor, as_completed # import time # import torch # # hack for debugging, set HTTP_ADDRESS to "http://127.0.0.1:8000/" # # os.environ["HTTP_ADDRESS"] = "http://192.168.7.79:8000" # test_image_url = "https://static.wixstatic.com/media/4d6b49_42b9435ce1104008b1b5f7a3c9bfcd69~mv2.jpg/v1/fill/w_454,h_333,fp_0.50_0.50,q_90/4d6b49_42b9435ce1104008b1b5f7a3c9bfcd69~mv2.jpg" # english_text = ( # "It was the best of times, it was the worst of times, it was the age " # "of wisdom, it was the age of foolishness, it was the epoch of belief" # ) # preprocessed_image = preprocess_image(test_image_url) # def _send_text_request(number): # embeddings = text_to_embedding(english_text) # return number, embeddings # def _send_image_url_request(number): # embeddings = image_url_to_embedding(test_image_url) # return number, embeddings # def _send_preprocessed_image_request(number): # embeddings = preprocessed_image_to_embedding(preprocessed_image) # return number, embeddings # def process(numbers, send_func, max_workers=10): # with ThreadPoolExecutor(max_workers=max_workers) as executor: # futures = [executor.submit(send_func, number) for number in numbers] # for future in as_completed(futures): # n_result, result = future.result() # result = json.loads(result) # print (f"{n_result} : {len(result[0])}") # # def process_text(numbers, max_workers=10): # # for n in numbers: # # n_result, result = send_text_request(n) # # result = json.loads(result) # # print (f"{n_result} : {len(result[0])}") # if __name__ == "__main__": # n_calls = 300 # # test text # # n_calls = 1 # numbers = list(range(n_calls)) # start_time = time.monotonic() # process(numbers, _send_text_request) # end_time = time.monotonic() # total_time = end_time - start_time # avg_time_ms = total_time / n_calls * 1000 # calls_per_sec = n_calls / total_time # print(f"Text...") # print(f" Average time taken: {avg_time_ms:.2f} ms") # print(f" Number of calls per second: {calls_per_sec:.2f}") # # test image url # # n_calls = 1 # numbers = list(range(n_calls)) # start_time = time.monotonic() # process(numbers, _send_image_url_request) # end_time = time.monotonic() # total_time = end_time - start_time # avg_time_ms = total_time / n_calls * 1000 # calls_per_sec = n_calls / total_time # print(f"Image passing url...") # print(f" Average time taken: {avg_time_ms:.2f} ms") # print(f" Number of calls per second: {calls_per_sec:.2f}") # # test image as vector # # n_calls = 1 # numbers = list(range(n_calls)) # start_time = time.monotonic() # process(numbers, _send_preprocessed_image_request) # end_time = time.monotonic() # total_time = end_time - start_time # avg_time_ms = total_time / n_calls * 1000 # calls_per_sec = n_calls / total_time # print(f"Preprocessed image...") # print(f" Average time taken: {avg_time_ms:.2f} ms") # print(f" Number of calls per second: {calls_per_sec:.2f}")