2015-01-09 2 views
0

Добрый вечер все,Многопроцессорные 500 событий 10 на 10?

Я хотел бы запустить что-то вроде процесса 500 в одно и то же время и решил написать пул, управляющий работой. Однако он очень тяжелый, и память не выглядит так, как будто он справится с этим. Любая рекомендация открыть/использовать пул, который будет выполнять процессы 10 на 10 или 50 на 50? Спасибо

Вот как я сейчас обрабатываю.

def get_data_mp(args): 
    settings = args 

    procs = len(settings.ticker_list) 
    pool = multiprocessing.Pool(procs) 
    tickers = pool.map(get_file_mp, [(settings,i) for i in range(procs)]) 
    pool.close() 
    pool.join() 

Обычно количество проков составляет около 500. Функции get_file_mp довольно тяжелый поэтому, когда все находится в памяти, компьютер страдает много. Вот почему я хотел бы иметь способ вывести эти процессы 10 на 10 или 50 на 50, поскольку я заметил, что компьютер смог справиться с этой нагрузкой на работу.

+0

У Python есть многопроцессорный пул, который управляет всем для вас. Проверьте https://docs.python.org/2/library/multiprocessing.html. Мне непонятно, как вы пытались запустить 500 процессов. Пожалуйста, дополните. – Aziz

ответ

0

Я бы создал два потока, один из которых представляет собой поток очереди событий, а другой - поток отправки событий.

  • В очереди на очередь событий, где ваши 500 процессов отправили туда событие. Как только это произойдет, он заснет.
  • Поток очереди событий будет ждать появления порогового значения заданий или произойдет время от последней отправки события. Ваш порог будет 10 или 50 или что угодно.
  • По достижении этого порогового значения или времени он будет выполнять 10 или 50 событий и передать их в поток отправки задания и снова переспать
  • Ваш поток отправки событий будет перебирать события и вызывать обработчик для каждого, а затем снова спать.

Это, если вы действительно хотите выполнять пакетные события, я лично предпочел бы не выполнять их пакет и попытаться оптимизировать их выполнение в режиме реального времени.

+0

Thanks.Sounds smart. Почему бы вам не рекомендовать их утилизацию? И как бы вы попытались оптимизировать? Я действительно искал маленькие циклы, которые можно было оптимизировать, но память мне не нравится. Должен сказать, что я все еще новичок в программировании, поэтому любая идея или рекомендации для меня были бы замечательными :) –

+0

Добро пожаловать. Причина не рекомендуется для пакетной обработки, потому что она сложнее, добавляет больше кода, вводит задержки в обработке событий и связывает вашу память с использованием и обработкой и сглаживает ее – hhafez

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