Ускорьте доступ к программам на Python из пакета Gecang exec - PullRequest
0 голосов
/ 21 марта 2019

Мне нужны предложения о том, как ускорить доступ к программам на Python при вызове из Golang. Мне действительно нужно быстрое время доступа (очень низкая задержка).

Подход 1:
func main () {
...
...
cmd = exec.Command ("python", "test.py")
o, err = cmd.CombinedOutput ()
...
} * +1010 *

Если мой файл test.py является базовой программой печати "HelloWorld", время выполнения превышает 50 мс. Я предполагаю, что большую часть времени это для загрузки оболочки и питона в память.

Подход 2: Вышеупомянутый подход может быть значительно ускорен, если Python запустит HTTP-сервер, а затем с помощью кода Go отправит POST HTTP-запрос и получит ответ от HTTP-сервера (Python). Ускоряет время отклика до 5 мс. Я думаю, главная причина этого, вероятно, в том, что интерпретатор python уже загружен и нагрелся в памяти.

Существуют ли другие подходы, которые я могу использовать аналогично подходу 2 (совместно используемая память и т. Д.), Который может ускорить ответ от моего кода на python ?. Наше приложение требует очень низкой задержки, и те 50 мс, которые я сейчас наблюдаю при использовании exec-пакета Golang, не собираются его сокращать.

спасибо,

1 Ответ

0 голосов
/ 21 марта 2019

Подход 1: Простой HTTP-сервер и клиент

Подход 2: Локальный сокет или канал

Подход 3: Общая память

Подход 4: GRPC-сервер и клиент

На самом деле, я предпочитаю метод GRPC потоковым способом, он будет удерживать соединение (из-за HTTP / 2), он прост, быстр и безопасен.И это легко перенести узел Python на другую машину.

...