Привет всем!
Пишу высоко нагруженное приложение на python, состоящее из множества процессов. Тяжёлые работы (вычисления) производятся с помощью numpy и dlib. Разделение на процессы сделано с через модуль multiprocessing. Отдельный процесс на источник данных, несколько процессов рабочих, один процесс сбора статистики и вывода результатов. Обмен большими данными производится через общую память (несколько объектов multiprocessing.Array(ctypes.c_uint8, buffer_size, lock=False)). Обновление состояния, сообщения о событиях - multiprocessing.Pipe(). Изначально была очередь, но работало совсем медленно, с переписыванием на Pipe стало более-менее.
Проблема в том, что рабочие процессы грузят ядра процессора процентов на 60 - 70. Т.е. по неизвестной причине они простаивают 30% времени. Я никак не могу найти это узкое место.
Мне нужно некое средство профилирования, для работы с множеством процессов. В моём понимании примерно следующее:
В нужных местах кода добавляются вызовы для вывода (в файл или stdout) точных отметок времени с комментариями (что за функция, какие-то параметры, т.п.). По этим отметкам потом строится график, где по оси X отмечается время, по Y - процессы, а на плоскости графика - сами отметки с комментариями.
Так я бы смог понять, какой процесс кого и когда ждёт и где искать это узкое место.
Вывод временных отметок можно и самому навелосепедировать, не сложно. Но, может быть, есть что-то готовое? А вот с графиком сложнее, в идеале он должен быть векторным и масштабируемым, с поиском и инструментами измерения (сколько времени прошло от события А до события Б), т.к. временных отметок предполагается ну очень много.
Как-то так...
P.S.: Переписать с Python'а на что-то другое не вариант.

Ответ на:
комментарий
от anonymous



Ответ на:
комментарий
от deep-purple

Ответ на:
комментарий
от pon4ik



Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум как найти в системе узкое место?????????? (2003)
- Форум Как искать узкие места (bottleneck) (2013)
- Форум Обнаружить узкое место в соединении (2016)
- Форум подтормаживание системы где узкое место? (2008)
- Форум Выявление узких мест в системе (2006)
- Форум Где у Linux узкое место? (2006)
- Форум Анализ узких мест в производительности (2005)
- Форум Поиск узких мест в веб приложении (2018)
- Форум Помогите найти узкое горлышко в сети (2018)
- Форум многопроцессность в питоне (2010)