Нужна помощь, минимизирующая потерю времени на сбор данных - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь найти лучший способ минимизировать потери времени в приложении для сбора данных, которое я создаю.Вот некоторые из ограничений / факторов:

  • Я могу запрашивать данные только каждые 12 секунд на определенном канале
  • Я могу подключиться к столько каналов одновременно.
  • Я хочу, чтобы количество используемых каналов было минимальным

С учетом этих факторов я подумал о решении, но хотел бы получить больше информации.

Я решил каким-то образом сбалансировать загрузку этой коллекции данных.Мои мысли таковы:

  • Основная программа использует m процессов (сейчас я думаю о 4).
  • Каждый процесс использует n потоков, где каждый поток прослушивает канал. (сейчас я думаю 12).
  • Существует переменная thread_start_time_factor = 12 seconds / n threads
  • Существует переменная process_start_time_factor = thread_start_time_factor / m processes
  • Данные каждого потока запроса каждые 12 секунд, однако потоки запускаются последовательно друг за другом на основеthread_start_time_factor.Поэтому, если я использую 12 потоков, поток 1 запускается (пауза 1 секунда), поток 2 запускается ... Таким образом, сбор данных теперь происходит каждую 1 секунду.
  • Каждый процесс затем запускается один за другимна основе process_start_time_factor

Теоретически, сбор данных ДОЛЖЕН происходить каждые process_start_time_factor При использовании вышеуказанной конфигурации значение process_start_time_factor должно составлять 0,250 секунды.(Если моя логика здесь неверна, пожалуйста, дайте мне знать).

Теперь вот мой вопрос.Это хороший способ сделать это?Моя мысль об использовании нескольких процессов заключается в том, чтобы по существу захватывать данные, когда другие процессы не являются.Программа будет написана на Python (не то, чтобы это имело значение).Кто-нибудь имел опыт с (странными) ограничениями сбора данных, такими как этот, когда они должны думать нестандартно?Спасибо всем, кто ответит заранее.Я наверняка открыт для других решений.

1 Ответ

0 голосов
/ 10 июля 2019

, учитывая, что вы используете прокси-серверы, не связанные с сайтом и не совсем понимаете вопрос, это говорит о том, что он граничит с нелегальным

при этом некоторые цифры, которые вы не указали, показывают, сколько времени занимает каждый запрос (например, TTFB, общая продолжительность, общее количество переданных данных) и что требуется для обработки ответов.

при условии, что вы не выполняете много обработки на входе, тогда я просто выбрал бы подход asyncio (то есть отсутствие параллелизма между процессами и потоками), так как намного проще добиться правильной координации. многопоточность / координация процессов очень неловко рассуждать о

вы должны быть в состоянии насыщать соединение 1 Гб с HTTP-запросами из одного потока, возможно, просто используя несколько процессов для постобработки, чтобы не мешать

...