Алексей Ярков, sim3x, Собственно, потому что ТС не в курсе, я и задал этот вопрос на Тостере :) Можно чуть-чуть подробнее по pyc файл/кеш? Или просто линк на тему?
Использовал Mongo с compound_index из четырех параметров, время итерации упало с 2.4 секунд до 0.5 секунды, в сумме сэкономил около получаса живого времени на каждой выборке/генерации, так что Монго действительно сильно помог, получилось быстрее генерации 4-х словарей :)
Сергей, Popen() действительно не нужен, я мог бы просто создавать процесс и запускать оттуда функцию. Но мои внешние файлы (которые я сейчас открываю через Popen) по нескольку сотен строчек, и subprocess.Popen() кажется более чистым/надежным решением, чем засорять namespace через from import *. Что думаете? :)
Сергей, То есть, приходим к тому, что это некрасиво/нерационально (это я сам уже прям осознаю), но как инструмент не для production приемлем :) Буду иметь ввиду.
Сергей, Все более чем понятно, огромное спасибо :) Но пока реализовал как раз через subprocess. В качестве Queue использую capped collection из MongoDB, и если ловлю нужный документ, то выполняю процесс через subprocess.Popen(). Правда, я его Popen запускаю в функции, а функцию запускаю через multiprocessing.Process(), так что вроде и овцы целы и волки сыты. А в чем проблема использования subprocess в данном контексте?
То есть, в первом примере доков, там Функция 1 посылает данные в Функцию 2, а затем забирает себе результат. Мне не совсем понятно, зачем в том примере Queue вообще :)
А можно чуть-чуть подробней? То есть, как запускать несколько процессов одновременно я разобрался, но вот с Queue есть недопонимание. Создал я Queue, положил туда промежуточные результаты Скрипта 1, которые затем должен оттуда достать Скрипт 2. Но ведь если промежуточных результатов 300 штук, то как Скрипт 2 сожрет и обработает их все? Мне не обязательно техническую реализую, мне бы логику понять :)
Пока лучший из возможных вариантов - Celery, немного сложновато, но если разобраться, то можно и список задач наглядно видеть, и очередям приоритеты присваивать, мир-труд-май.
sim3x, Я создаю процесс под задачу, таких задач образно 20 актуально, создаю 20 процессов. Потом по 5 задачам уже не нужно собирать данные, я убиваю процесс. Обмениваться информацией процессы не должны, каких-то связей или pipeline я не вызываю, чтобы они могли сломаться. В чем некорректность подхода?