Julia系列16:Julia与python/c互调

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 

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

你可能感兴趣的:(Julia系列,julia,python,c语言)