Q : Как мне достичь этого параллелизма операций?
Шаг номер один состоит в Следует понимать, что запрошенный выше вариант использования не является [PARALLEL]
выполнением кода, а неупорядоченным пакетом ограниченного выполнения политики использования ресурсов строгой последовательности пар:
First -a- remote-[DB-Query]
(возвращение (цит.) ОГРОМНОЕ количество данных )
Далее -a- local-[CPU-process]
(из (cit.) ОГРОМНОЕ количество данных только что вернулось сюда)
Задержка первого может быть в маске
(если это было разрешено, , но не разрешено - из-за желания не перегружать DB-хост) ,
задержка для второго не
(может запускаться, но следующий связанный с вводом / выводом запрос DB, но только если не нарушает правило хранения DB-машины, но под небольшой рабочей нагрузкой) .
Как я полагаю, вы заметили , если бы я мог выполнить анализ данных в потоке, я мог бы загрузить следующую партию данных, пока выполняется синтаксический анализ.
Это самое время до Проясните ситуацию:
Факты:
A )
Задачи, связанные с процессором никогда не будут выполнены работать быстрее в любом количестве N
потоков в python -GIL-lock-управляемой экосистеме (с тех пор и всегда, как выразился Гвидо Россум) ,
как GIL-блокировка обеспечивает повторную [SERIAL]
-изацию, поэтому чем больше потоков «работает», тем больше потоков фактически ожидает получения GIL-блокировки, прежде чем они «получат» его, но для 1 / ( N + 1 )
-ая доля времени полученного, благодаря GIL-замку, снова чистая - [SERIAL]
, длительность N * ( 30 - 60 ) [sec]
B )
Задача, связанная с вводом / выводом, не имеет смысла выгружать в полное параллельное выполнение на основе процесса, как полную копию процесса python (в Windows также с дублированием полное состояние интерпретатора python со всеми данными во время создания экземпляра подпроцесса) не имеет смысла, поскольку существуют более разумные методы для обработки, связанной с вводом-выводом (где GIL-блокировка не причиняет столько вреда.
C)
Вся концепция N-parsing : 1-querying
принципиально неверна - максимально достижимая цель - замаскировать задержку процесса ввода-вывода (где создание в смысле), но здесь каждый запрос занимает упомянутых ~ 40-50 [sec]
, поэтому второй пакет данных для анализа здесь никогда не будет присутствовать до запуска упомянутых ~ 40-50 [sec]
в следующий раз, поэтому
ни один второй работник никогда не сможет что-либо проанализировать в любое время до T0 + ~ 80~100 [sec]
- так что можно мечтать о том, чтобы sh N - (несвязанные) -работники, работающие (но имеющие их, но фактически ожидающие данные), возможны, но ужасно непродуктивно (хуже для N- (GIL-MUTEX-ed) - "ожидающих" -агентов).