Julia系列16:Julia与python/c互调
通过PyCall包,Julia可以直接调用Python包。数值、布尔、字符串、IO stream、函数、元组、数组或列表、以及包含这些类型的字典等,它们都会自动进行类型的转换(Python函数会被转换或传递为Julia的函数,反之亦然)。其它类型则是通过通用的PyObject提供的。
·
1 Julia调用python
通过PyCall包,Julia可以直接调用Python包。例如:
using PyCall
np= pyimport("numpy")
x = np.linspace(1, 10, 10)
数值、布尔、字符串、IO stream、函数、元组、数组或列表、以及包含这些类型的字典等,它们都会自动进行类型的转换(Python函数会被转换或传递为Julia的函数,反之亦然)。其它类型则是通过通用的PyObject提供的。
2 python调用julia
首先pip install Julia安装包,然后使用下面的代码调用:
from julia.api import Julia
jl = Julia(compiled_modules=False)
jl.eval(open("testJulia.jl").read()) # 简单的julia代码可以直接写在这里面
from julia import Main
Main.function(...)
下面是将julia代码用python的fastapi封装的例子:
from fastapi import FastAPI, Request
from julia.api import Julia
jl = Julia(compiled_modules=False)
jl.eval(open("solve.jl").read())
from julia import Main
from typing import Any
app = FastAPI()
@app.post("/solve")
async def root(request:Request):
data = eval(await request.body())
res = Main.solve(data)
return {"status":"OK","result":res}
if __name__ == '__main__':
import uvicorn
uvicorn.run(app="solve:app", host="127.0.0.1", port=8001)
发送的post请求为
resp = HTTP.post("https://0.0.0.0/solve", [], JSON3.write(data), require_ssl_verification = false)
println(resp)
可以使用python来安装Julia环境:
pip install jill -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install julia -i https://pypi.tuna.tsinghua.edu.cn/simple
jill install --confirm
export JULIA_PKG_SERVER=https://mirrors.cernet.edu.cn/julia
julia -e "import Pkg; Pkg.add(\"HiGHS\");Pkg.add(\"JuMP\")"
3 Julia调用c
下面是调用c函数的例子。
t - ccall((:clock, "libc"), Int32, ()) # 调用C的clock函数
t = @ccall clock()::Int32 # 简化调用方法,需要注明返回类型
下面是一个调用c库的例子:
#include <stdio.h>
int print_y(int y)
{
printf("got y = %d.\n", y);
return y+10;
}
编译:gcc -fPIC -shared -o mylib.so mylib.c
在Julia中调用:
@ccall "./mylib.so".print_y((-5)::Cint)::Cint
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献13条内容
所有评论(0)