Clojure 创建 python 运行时并执行任务
Clojure create python runtime and execute task
我想用 Clojure 编写一个程序,它具有 Python 运行时并采用 Python 函数代码,以及来自某些客户端通过套接字传递给该函数的参数列表,然后它添加这个函数到运行时,用参数调用它,returns结果给客户端。
我想知道如何:
- 在 Clojure 中创建 Python 运行时
- 在此运行时发送代码并在 Clojure 中获取结果
您可以为此使用 clojure.java.shell
:
(ns tst.clj.core
(:require [clojure.java.shell :as shell] ))
(t/refer-tupelo)
(t/print-versions)
(println (shell/sh "python" "-c" "print (2 + 3)" ))
;=> {:exit 0, :out "5\n", :err ""}
更新
如果你担心启动的开销 Python,好像只有 6 ms 左右:
(time
(let [sum-vec (for [i (range 100)]
(Integer/parseInt (str/trim (:out (shell/sh "python" "-c" (format "print (%d + 3)" i))))))
cumsum (reduce + sum-vec)
]
(println :cumsum cumsum)))
;=> :cumsum 5250
;=> "Elapsed time: 638.612278 msecs"
我想用 Clojure 编写一个程序,它具有 Python 运行时并采用 Python 函数代码,以及来自某些客户端通过套接字传递给该函数的参数列表,然后它添加这个函数到运行时,用参数调用它,returns结果给客户端。
我想知道如何:
- 在 Clojure 中创建 Python 运行时
- 在此运行时发送代码并在 Clojure 中获取结果
您可以为此使用 clojure.java.shell
:
(ns tst.clj.core
(:require [clojure.java.shell :as shell] ))
(t/refer-tupelo)
(t/print-versions)
(println (shell/sh "python" "-c" "print (2 + 3)" ))
;=> {:exit 0, :out "5\n", :err ""}
更新
如果你担心启动的开销 Python,好像只有 6 ms 左右:
(time
(let [sum-vec (for [i (range 100)]
(Integer/parseInt (str/trim (:out (shell/sh "python" "-c" (format "print (%d + 3)" i))))))
cumsum (reduce + sum-vec)
]
(println :cumsum cumsum)))
;=> :cumsum 5250
;=> "Elapsed time: 638.612278 msecs"