blocking_io_operation function below is an external method which I don't have a control. To run multiple request, I am running it in multiple thread using Threadpoolexecutor. Is there a better way to do this?
import asyncio
from concurrent.futures import ThreadPoolExecutor
# Simulating a blocking I/O operation
def blocking_io_operation(param1, param2):
import time
time.sleep(2) # Simulating a 2-second blocking operation
return f"Result from blocking operation with params: {param1}, {param2}"
async def handle_request(request_data, param1, param2, loop, executor):
print(f"Received request: {request_data}")
# Run the blocking I/O operation in a separate thread with multiple parameters
result = await loop.run_in_executor(executor, blocking_io_operation, param1, param2)
print(f"Blocking operation result: {result}")
return f"Processed request: {request_data}"
async def main():
loop = asyncio.get_event_loop()
executor = ThreadPoolExecutor()
# Simulate handling multiple incoming requests concurrently with different parameters
requests = [
("Request 1", "Param1 for Request 1", "Param2 for Request 1"),
("Request 2", "Param1 for Request 2", "Param2 for Request 2"),
("Request 3", "Param1 for Request 3", "Param2 for Request 3")
]
tasks = [handle_request(request[0], request[1], request[2], loop, executor) for request in requests]
await asyncio.gather(*tasks)
# Explicitly shutdown the executor to release resources
executor.shutdown()
if __name__ == "__main__":
asyncio.run(main())