Я написал сценарий, который извлекает URL-адреса из файла и одновременно отправляет HTTP-запросы ко всем URL-адресам. Теперь я хочу ограничить количество HTTP-запросов в секунду и пропускную способность для каждого интерфейса (eth0
, eth1
и т. Д.) В сеансе. Есть ли способ достичь этого на Python?Ограничение количества HTTP-запросов в секунду на Python
ответ
Вы можете использовать объект семафор, который является частью стандартной Lib Python: python doc
Или, если вы хотите работать с потоками напрямую, вы можете использовать ожидание ([время]).
В комплекте с Python нет библиотеки, которая может работать на Ethernet или другом сетевом интерфейсе. Самое низкое, на которое вы можете пойти, - это сокет.
Основываясь на вашем ответе, вот мое предложение. Обратите внимание на active_count. Используйте это только для проверки того, что ваш скрипт запускает только два потока. В этом случае им будет три, потому что номер один - это ваш скрипт, тогда у вас есть два запроса URL.
import time
import requests
import threading
# Limit the number of threads.
pool = threading.BoundedSemaphore(2)
def worker(u):
# Request passed URL.
r = requests.get(u)
print r.status_code
# Release lock for other threads.
pool.release()
# Show the number of active threads.
print threading.active_count()
def req():
# Get URLs from a text file, remove white space.
urls = [url.strip() for url in open('urllist.txt')]
for u in urls:
# Thread pool.
# Blocks other threads (more than the set limit).
pool.acquire(blocking=True)
# Create a new thread.
# Pass each URL (i.e. u parameter) to the worker function.
t = threading.Thread(target=worker, args=(u,))
# Start the newly create thread.
t.start()
req()
Вы могли бы использовать понятие работник, как описано в документации: https://docs.python.org/3.4/library/queue.html
Добавить команду ожидания() внутри ваших работников, чтобы их ждать между запросами (в примере из документации: внутри "while true" после task_done).
Пример: 5 «Рабочий» -Треды с временем ожидания 1 с между запросами будут делать менее 5 выборок в секунду.
- 1. Ограничение количества потоков в python
- 2. Ограничение количества запросов Node.js в секунду при использовании модуля кластера
- 3. Python Ограничение количества разрешенных потоков
- 4. Ограничение на два входа клавиатуры в секунду
- 5. Python: ограничение количества элементов в массиве
- 6. есть ли ограничение по GAE в секунду или ограничение количества экземпляров, которые теперь получают ошибку python 10060?
- 7. Ограничение количества устройств на рельсах
- 8. Ограничение количества кликов на кнопке
- 9. Ограничение количества запросов на сервлет
- 10. Многопроцессорность Python: ограничение количества используемых ядер
- 11. Python 3 - Ограничение количества вложенных циклов
- 12. Python - ограничение количества потоков при многопоточности
- 13. Ограничение количества используемых сердечников
- 14. Запрос на ограничение количества запросов в день
- 15. Запросы количества запросов NGINX в секунду
- 16. Android OpenGL ES: ограничение кадров в секунду
- 17. Ограничение количества элементов списка?
- 18. Apache HttpClient: ограничение общих вызовов в секунду
- 19. C# System.Windows.Form.Control.MouseClick - Увеличение количества кликов в секунду?
- 20. Ограничение количества слов в тегах
- 21. Ограничение количества виджетов в Wordpress
- 22. Ограничение количества переменных Matlab
- 23. Ограничение количества слов в tinyMCE
- 24. Ограничение количества файлов в gvim
- 25. Ограничение количества ячеек в UITableView
- 26. Ограничение количества символов в JTextField
- 27. Ограничение количества пользователей в Rails
- 28. Ограничение количества нерешенных тем
- 29. Ограничение количества строк в textarea
- 30. Ограничение количества порожденных процессов в пакетном скрипте
Как добавить его в свой скрипт? Я новичок в питоне. – Naveen
Вам нужно будет опубликовать свой источник (часть потока), чтобы кто-то помог. Как говорит Питон: «Семафоры часто используются для защиты ресурсов с ограниченными возможностями». Начните со следующего и последующего расширения, чтобы он соответствовал вашему коду. Сначала установите предел = 5. Затем вам понадобится пул потоков -> pool = BoundedSemaphore (значение = limit). Затем заблокируйте поток пулом pool.acquire(), отправьте http-запрос (например, urllib2) и, наконец, разблокируйте поток пулом pool.release(). – Georgi
импорта резьбонарезной импорта время импорта запросы четкости REQ(): URLs = [url.strip() для URL в открытом ('urllist.txt')] для и в диапазоне (LEN (URL)): г = requests.get (URL [U]) печати r.status_code, URL [U] нити = [] нити = threading.Thread (мишень = REQ) threads.start() – Naveen