В приведенном коде реализован механизм очереди запросов к API с блокировкой функции до выполнения каждого запроса и очисткой очереди через определенный интервал.
Для более эффективной реализации очереди можно использовать многопоточность и синхронизацию. Вместо использования `queue.Queue`, можно использовать `queue.LifoQueue` или `queue.PriorityQueue`, в зависимости от требований к порядку обработки запросов. Также можно использовать `concurrent.futures` для управления одновременным выполнением запросов.
Вот пример более эффективной реализации с использованием `concurrent.futures`:
```python
import time
import concurrent.futures
# Список запросов
requests = ["request1", "request2", "request3"]
# Функция для выполнения запроса и возврата результата
def process_request(request):
# Выполняем запрос
result = make_api_request(request)
# Возвращаем результат
return result
# Создаем и запускаем пул потоков
with concurrent.futures.ThreadPoolExecutor() as executor:
# Список Future объектов для хранения результатов запросов
futures = []
# Добавляем запросы в пул потоков
for request in requests:
future = executor.submit(process_request, request)
futures.append(future)
# Ждем завершения всех Future объектов
concurrent.futures.wait(futures)
# Получаем результаты запросов
results = [future.result() for future in futures]
print(results)
# Блокируем выполнение функции на определенный интервал
time.sleep(60)
```
В этом коде используется `concurrent.futures.ThreadPoolExecutor` для создания пула потоков. Затем запросы добавляются в пул потоков с помощью `executor.submit`, который возвращает `Future` объект для каждого запроса.
После этого используется `concurrent.futures.wait` для ожидания завершения всех `Future` объектов.
И, наконец, результаты запросов получаются с помощью `future.result()` и выводятся.