Phoenix LiveView с бизнес -процессом Python - но общение не удаетсяPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Phoenix LiveView с бизнес -процессом Python - но общение не удается

Сообщение Anonymous »

У меня есть приложение Phoenix, где я использую LiveView, чтобы получить пользовательские вводы через пользовательский интерфейс. Эти входы упаковываются в JSON и отправляются в бизнес -процесс Python (сценарий), который, в свою очередь, возвращает результаты в JSON в LiveView, где они отображаются. < /P>
Я отправляю свой json Успешно на Python, запустив его и получая результаты, однако я не получаю результат при выполнении его от LiveView (когда я запускаю свой Python MyNaully в терминале, результаты JSON возвращаются нормально). Это должно быть просто, я уверен, что мне не хватает действительно простой точки. Кто -нибудь может помочь? К вашему сведению, мой бизнес -процесс Python занимает 0,03 секунды, работая при запуске вручную от начала до конца < /p>
python Я звоню: < /p>

Код: Выделить всё

def main():
try:
raw_input = sys.stdin.read().strip()
input_data = json.loads(raw_input)
results = optimizer_function(input_data) # optimizer_function is my business process
output = json.dumps(results)
sys.stdout.write(output + "\n")
sys.stdout.flush()
except Exception as e:
sys.stdout.write(json.dumps({"error": str(e)}) + "\n")
sys.stdout.flush()

if __name__ == "__main__":
main()
< /code>
My Phoenix Optimizer Business Process Snippets: < /p>
defmodule Commrefiner.Optimizer do
def run_optimizer(params) do
json_input = Jason.encode!(params)
script_path = Application.fetch_env!(:commrefiner, :optimizer_script_path)

port = Port.open({:spawn_executable, "path/to/virtual/environment/python3"}, [
{:args, [script_path]},
:binary,
:exit_status,
:use_stdio,
:stderr_to_stdout
])

Port.command(port, json_input  "\n")
response = collect_output(port, "")
Port.close(port)

case Jason.decode(response) do
{:ok, result} -> result
{:error, _} -> %{"error" => "Invalid JSON response from optimizer"}
end
end

defp collect_output(port, acc) do
case Port.info(port, :os_pid) do
{:os_pid, _pid} ->
receive do
{^port, {:data, output}} -> collect_output(port, acc  output)
{^port, {:exit_status, status}} -> acc
after
15_000 ->  # ✅ Allow enough time for Python output
acc
end
nil ->
acc
end
end
end
< /code>
my phoenix live_view кодовые фрагменты: < /p>
  def handle_event("run_optimizer", _params, socket) do
params = %{params: socket.assigns.user_inputs}
headers = [{"Content-Type", "application/json"}] # Define and ensure correct headers

# encode JSON before sending
response = HTTPoison.post("http://localhost:4000/api/optimizer", Jason.encode!(params), headers)

case response do
{:ok, %HTTPoison.Response{status_code: 200, body: body}} ->
case Jason.decode(body) do
{:ok, results} -> {:noreply, assign(socket, results: results)}
{:error, _} -> {:noreply, assign(socket, results: %{"error" => "Invalid JSON response"})}
end

{:ok, %HTTPoison.Response{status_code: code, body: body}} ->  # ✅ Handle non-200 responses
IO.puts("❌ API returned status #{code}")
IO.inspect(body, label: "Non-200 Response")
{:noreply, assign(socket, results: %{"error" => "API error: #{code}"})}

{:error, %HTTPoison.Error{reason: reason}} ->  # ✅ Handle request errors
IO.puts("❌ Optimizer API request failed")
IO.inspect(reason, label: "Optimizer API Error")
{:noreply, assign(socket, results: %{"error" => "Failed to call optimizer"})}
end
end
Мои журналы указывают:
Тайм -аут в запросе API Phoenix:
  • Ошибка API оптимизатора :: Тайм -аут < /li>
    Пере процесс Python. Частичные данные: ""
    скрипт Python не отправляет никаких выводов до тайм -аута:
  • Полный необработанный ответ от Python: ""
  • Вывод сырого питона: ""
    Что происходит? li>
    Он отправляет ввод JSON. < /li>
    Python не отправляет выход до тайм -аута. < /li>
    Время запроса API OUT перед Python может вернуть данные.
  • Phoenix закрывает соединение, в результате чего Python выходит из строя с BrokenPipeError.


Подробнее здесь: https://stackoverflow.com/questions/794 ... tion-fails
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Стилизация статических и динамических текстовых полей в Phoenix LiveView
    Anonymous » » в форуме CSS
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Стилизация статических и динамических текстовых полей в Phoenix LiveView
    Anonymous » » в форуме CSS
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Как создать несколько бизнес-объектов внутри одного бизнес-объекта в XAF?
    Anonymous » » в форуме C#
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Как создать несколько бизнес-объектов внутри одного бизнес-объекта в XAF?
    Anonymous » » в форуме C#
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • Декодирование имени столбца таблицы Apache Phoenix с использованием HBase API
    Anonymous » » в форуме Apache
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»