Ответ 1
Передайте поиск в отдельный процесс, который ставит очередь запросов до тех пор, пока не станет их очередь.
В настоящее время я изучаю Python (с фона Java), и у меня есть вопрос о том, что я использовал бы потоки в Java.
Моя программа будет использовать рабочих для периодического чтения некоторых веб-сервисов. Каждый работник периодически будет вызывать веб-сервис в разное время.
Из того, что я прочитал, предпочтительнее использовать модуль multiprocessing
и настроить рабочих как самостоятельные процессы, которые выполняют свои задачи сбора данных. На Java я бы сделал что-то концептуально похожее, но используя потоки. Хотя кажется, что я могу использовать потоки в Python, я проиграю при использовании нескольких процессоров.
Вот мужество моего вопроса: интернет-сервис задушен, а именно: рабочие не должны называть его больше, чем х раз в секунду. Каков наилучший способ для работников проверить, могут ли они запрашивать данные?
Я запутался в том, что это должно быть достигнуто с помощью:
nmap
, чтобы поделиться некоторыми данными/значением между процессами, которые описывают, могут ли они вызвать веб-службу.Manager()
, который отслеживает вызовы в секунду и сообщает рабочим, если у них есть разрешение на выполнение своих вызовов.Конечно, я думаю, это может привести к тому, что я отслеживаю звонки в секунду. Я полагаю, что одним из вариантов было бы, чтобы рабочие вызывали функцию на какой-то другой объект, что делает вызов веб-службе и записывает текущее количество вызовов/сек. Другим вариантом будет функция, которая вызывает веб-сервис для жизни внутри каждого рабочего, и для них сообщение управляющего объекта при каждом вызове веб-службы.
Мысли приветствуются!
Передайте поиск в отдельный процесс, который ставит очередь запросов до тех пор, пока не станет их очередь.
Я думаю, что вы обнаружите, что модуль multiprocessing
предоставит вам некоторые довольно знакомые конструкции.
Вы можете обнаружить, что multiprocessing.Queue
полезно для подключения рабочих потоков к управляющему потоку, который может обеспечить мониторинг или дросселирование.
Не совсем ответ на ваш вопрос, но альтернативный подход к вашей проблеме: вы можете избавиться от проблем синхронизации при выполнении запросов, управляемых событиями, например. используя асинхронный модуль Python или Twisted. Вы не выиграли бы от нескольких процессоров/ядер, но в контексте сетевой коммуникации, которая обычно незначительна.