2013-12-16 1 views
0

Мое приложение неоднократно опроса API и порождает процессы для анализа любых новых данных, полученных в результате этих вызовов, условно создавая запрос API на основе этих данных. Скорость этого времени обработки критическая.Пул теплых, многоразовых процессов на Python

Больших узкое места, кажется, связан с настройкой фактическим порождали сами процессы - несколько импорта модулей и обычный код создания экземпляра, которые занимают до 0,05 секунды на посредственные настройках Amazon . Похоже, было бы полезно иметь пакет процессов с уже выполненным кодом импорта/инициализации ††, ожидая результатов обработки. Каков наилучший способ создания/общения с пулом (10-20?) теплых, многоразовых и чрезвычайно легких процессов в Python?

† - да, я знаю, что помощь в решении проблемы поможет, и я тоже это сделаю.

†† - да, я знаю, делать меньше будет помогать, и я работаю над сделать код, как обтекаемый и минимально возможным

+1

Вы делаете это так грубо. –

+1

Мне действительно нравится этот титул! – ixe013

ответ

1

Ну, вы для кривой обучения здесь, но multiprocessing.Pool() будет создайте пул из любого количества процессов, которые вы указали. Используйте аргумент initializer=, чтобы указать функцию, которую каждый процесс будет запускать в начале. Затем есть несколько методов, которые вы можете использовать для отправки рабочих элементов в процессы в пуле - прочитайте документы, поиграйте с ним и задайте вопросы, если вы застряли.

Осторожно: «чрезвычайно легкие процессы» невозможны. По определению процессы «тяжелые». «Насколько тяжело» зависит от вашей операционной системы и не имеет ничего общего с языком программирования, который вы используете. Если вы ищете легкий вес, вы ищете темы.

+0

Спасибо за ваш ответ. Возможно, вместо «чрезвычайно легкого» я ​​должен был сказать «крайне недолго». Но в обоих случаях все относительно. –

+0

Но вы не хотите «недолговечного» вообще, не так ли? Кажется, что вы хотите создать каждый процесс только один раз, а также * продолжать * принимать новую работу по мере появления новой работы. «Пакет процессов с уже выполненным кодом импорта/инициализации, ожидающим обработки результатов» - это именно то, что «Pool()» будет делать для вас. Если это не то, что вы хотите, вы должны отредактировать вопрос ;-) –

+0

Правильно - продолжительность работы, которую они делают, недолговечна, но процессы должны иметь возможность делать это повторно и существовать, пока я не закончу с ними. Вы понимаете, что это прекрасно. –

Смежные вопросы