Интеграция ray с django не достигает одинаковой производительности
У меня есть приложение Django + Apache + WSGI, которое имеет определенные конечные точки с определенными действиями, такими как:
- Load/Reload names from database [keeps in memory all the data]
- Inserting/Updating names [the names loaded in memory]
- Searching names similarity [search for the names] (would like to improve performance)
Действие #3 получает некоторые параметры и возвращает соответствующие совпадающие имена согласно логу. Для поиска около 200k ~ 300k имен (многопоточная обработка) требуется около 0.9s, и мне нужно улучшить это время отклика.
Я пробовал использовать модуль мультипроцессинга, но это занимает немного больше времени, чем оригинальная реализация, так как мне нужно делать копию данных или сериализовать/десериализовать данные каждый раз.
После проведения некоторых исследований я нашел ray. Я создал набор данных и протестировал его в локальном и удаленном режиме, и результаты оказались в 3-5 раз быстрее.
Проблема в том, что я не могу найти способ интегрировать мое приложение django в ray logic и достичь той же производительности:
ray.init(ignore_reinit_error=True)
#collecting some data and then calling to ray
results = ray.get(tree.TrieNode.search_name_remote.remote(parameters)
Результаты почти одинаковые.
Я обращаюсь к базе данных только в действии #1 для загрузки данных, поэтому мне не нужно использовать модели или что-то подобное, как в приведенных примерах.
Есть ли способ создать API, аналогичный текущему, и позже масштабировать его на несколько узлов, имеющих те же или новые конечные точки?