亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過 Erlport 執行的函數停止響應

通過 Erlport 執行的函數停止響應

富國滬深 2023-10-31 14:33:44
我正在寫我的論文申請。我需要線性編程,但我的應用程序是用 Elixir 編寫的,這實際上不是用于此類操作的語言。這就是為什么我決定使用 Erlport 作為 Elixir 依賴項,它能夠將 Python 代碼與 Elixir 連接起來。我還使用 Pulp 作為優化的 python 庫。Elixir 版本:1.10.4,Erlport 版本:0.10.1,Python 版本:3.8.5,PuLP 版本:2.3我為 Elixir-Python 通信編寫了這樣一個模塊,它利用 GenServer 作為 Elixir 和 Python 之間的主要“通信中心”:defmodule MyApp.PythonHub do  use GenServer  def start_link(_) do    GenServer.start_link(__MODULE__, nil, name: __MODULE__)  end  def init(_opts) do    path = [:code.priv_dir(:feed), "python"]          |> Path.join() |> to_charlist()    {:ok, pid} = :python.start([{ :python_path, path }, { :python, 'python3' }])    {:ok, pid}  end  def handle_call({:call_function, module, function_name, arguments}, _sender, pid) do    result = :python.call(pid, module, function_name, arguments)    {:reply, result, pid}  end  def call_python_function(file_name, function_name, arguments) do    GenServer.call(__MODULE__, {:call_function, file_name, function_name, arguments}, 10_000)  endend對 GenServer 本身的調用如下所示:PythonHub.call_python_function(:diets, python_function, [products_json, meal_statistics_json, @min_portion, @max_portion, @macro_enhancement])其中python_function是:calculate_meal_4,products_json和meal_statistic_json是包含所需數據的 json。通過python3 Diets.py調用calculate_meal_4時,它啟動了上面的python腳本,并帶有一些示例,但是真實的(取自應用程序),數據一切正常 - 我幾乎很快就得到了最小化的結果。通過 Elixir Erlport 調用 python 腳本時出現問題。看看打印的輸出,我可以看出它似乎一直有效,直到solved_model = model.solve()叫做。然后腳本似乎凍結了,GenServer 最終達到了GenServer.call函數的超時。我還測試了一個簡單的 python 測試文件的調用:def pass_var(a):  print(a)  return [a, a, a]效果很好。這就是為什么我現在真的很困惑,我正在尋求任何建議。遺憾的是我還沒有發現什么。
查看完整描述

1 回答

?
收到一只叮咚

TA貢獻1821條經驗 獲得超5個贊

嗯,調用外部求解器可能會凍結該過程。

鑒于您可以使用 elixir 執行 bash 腳本,您可以輕松地將 python 腳本更改為命令行可執行文件(我建議單擊)。然后,您可以將輸出寫入.json.csv文件,并在完成后使用 Elixir 將其讀回。

@click.group()

def cli():

? ? pass


@cli.command()

@click.argument('products_json', help='your array of products')

@click.argument('diet_json', help='your dietary wishes')

@click.option('--lower-bound', default=0, help='your minimum number of desired calories')

@click.option('--upper-bound', default=100, help='your maximum number of desired calories')

@click.option('--enhance', default=False, help="whether you'd like to experience our enhanced experience")

def calculate_meal_4(products_json, diet_json, lower_boundary, upper_boundary, enhance):

? ? pass


if __name__ == '__main__':

? ? cli()

然后您可以使用python3 my_file.py <products_json> <diet_json> ...等等來調用它。

您甚至可以驗證 JSON,然后直接返回解析后的數據。


查看完整回答
反對 回復 2023-10-31
  • 1 回答
  • 0 關注
  • 151 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號