From 85aa2216bcaa3205bdd454151cbf0f5b9086b7d8 Mon Sep 17 00:00:00 2001 From: theognis1002 Date: Sun, 19 Feb 2023 11:45:23 -0500 Subject: [PATCH] Threadpool test in API view --- apps/products/api/views.py | 16 ++++++++++++++++ requirements.txt | 1 + 2 files changed, 17 insertions(+) diff --git a/apps/products/api/views.py b/apps/products/api/views.py index edca589..bd58e87 100644 --- a/apps/products/api/views.py +++ b/apps/products/api/views.py @@ -1,5 +1,7 @@ import asyncio +import concurrent.futures +import requests from django.contrib.auth import get_user_model from rest_framework.decorators import action from rest_framework.response import Response @@ -15,6 +17,12 @@ async def fetch_ip(): return "123.42.941" +def fetch_headers(): + response = requests.get("http://httpbin.org/headers") + print(response.status_code) + return response.json() + + class UserViewSet(ModelViewSet): serializer_class = UserSerializer queryset = User.objects.all() @@ -25,3 +33,11 @@ def ip(self, request): asyncio.set_event_loop(loop) ip = loop.run_until_complete(fetch_ip()) return Response({"result": ip}) + + @action(detail=False, methods=["get"]) + def headers(self, request): + with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor: + futures = [executor.submit(fetch_headers) for _ in range(2)] + for future in concurrent.futures.as_completed(futures): + future.result() + return Response({"result": "ok"}) diff --git a/requirements.txt b/requirements.txt index 4818309..7f8b8df 100644 --- a/requirements.txt +++ b/requirements.txt @@ -29,6 +29,7 @@ python-dateutil==2.8.2 pytz==2021.1 PyYAML==6.0 regex==2021.8.28 +requests six==1.16.0 sqlparse==0.4.1 text-unidecode==1.3