Spaces:
Runtime error
Runtime error
| """https://zetcode.com/python/concurrent-http-requests/""" | |
| import asyncio | |
| import random | |
| import time | |
| import pandas as pd | |
| import httpx | |
| from os.path import exists | |
| NUMBER_OF_CALLS = 1 | |
| headers = {"Content-Type": "application/json; charset=utf-8"} | |
| # base_url = "https://tangibleai-mathtext-fastapi.hf.space/{endpoint}" | |
| base_url = "http://localhost:7860/run/{endpoint}" | |
| data_list_1 = { | |
| "endpoint": "text2int", | |
| "test_data": [ | |
| "one hundred forty five", | |
| "twenty thousand nine hundred fifty", | |
| "one hundred forty five", | |
| "nine hundred eighty three", | |
| "five million", | |
| ] | |
| } | |
| data_list_2 = { | |
| "endpoint": "text2int-preprocessed", | |
| "test_data": [ | |
| "one hundred forty five", | |
| "twenty thousand nine hundred fifty", | |
| "one hundred forty five", | |
| "nine hundred eighty three", | |
| "five million", | |
| ] | |
| } | |
| data_list_3 = { | |
| "endpoint": "sentiment-analysis", | |
| "test_data": [ | |
| "Totally agree", | |
| "I like it", | |
| "No more", | |
| "I am not sure", | |
| "Never", | |
| ] | |
| } | |
| # async call to endpoint | |
| async def call_api(url, data, call_number, number_of_calls): | |
| json = {"data": [data]} | |
| async with httpx.AsyncClient() as client: | |
| start = time.perf_counter() # Used perf_counter for more precise result. | |
| response = await client.post(url=url, headers=headers, json=json, timeout=30) | |
| end = time.perf_counter() | |
| return { | |
| "endpoint": url.split("/")[-1], | |
| "test data": data, | |
| "status code": response.status_code, | |
| "response": response.json().get("data"), | |
| "call number": call_number, | |
| "number of calls": number_of_calls, | |
| "start": start.__round__(4), | |
| "end": end.__round__(4), | |
| "delay": (end - start).__round__(4) | |
| } | |
| data_lists = [data_list_1, data_list_2, data_list_3] | |
| results = [] | |
| async def main(number_of_calls): | |
| for data_list in data_lists: | |
| calls = [] | |
| for call_number in range(1, number_of_calls + 1): | |
| url = base_url.format(endpoint=data_list["endpoint"]) | |
| data = random.choice(data_list["test_data"]) | |
| calls.append(call_api(url, data, call_number, number_of_calls)) | |
| r = await asyncio.gather(*calls) | |
| results.extend(r) | |
| start = time.perf_counter() | |
| asyncio.run(main(NUMBER_OF_CALLS)) | |
| end = time.perf_counter() | |
| print(end-start) | |
| df = pd.DataFrame(results) | |
| if exists("call_history.csv"): | |
| df.to_csv(path_or_buf="call_history.csv", mode="a", header=False, index=False) | |
| else: | |
| df.to_csv(path_or_buf="call_history.csv", mode="w", header=True, index=False) | |