v.t*_*ala 5 python julia python-multiprocessing juliacall
我想从 python 中运行 julia 函数/脚本。我设法通过库调用 Julia 脚本juliacall
。现在我想并行化它。因此,我创建了一个 python 多处理池并从每个工作人员调用 julia 脚本。但是,这会失败并显示以下消息:
python: /buildworker/worker/package_linux64/build/src/debuginfo.cpp:1634: void register_eh_frames(uint8_t*, size_t): Assertion `end_ip != 0' failed.
Run Code Online (Sandbox Code Playgroud)
我怎样才能进一步调试这个?这是我的最小工作示例:
python: /buildworker/worker/package_linux64/build/src/debuginfo.cpp:1634: void register_eh_frames(uint8_t*, size_t): Assertion `end_ip != 0' failed.
Run Code Online (Sandbox Code Playgroud)
还有朱莉娅剧本test_julia_simple.jl
for i in 1:10
println(i)
end
1+2
Run Code Online (Sandbox Code Playgroud)
附加信息:
import os
os.environ['PYTHON_JULIAPKG_EXE'] = "/home/user/.juliaup/bin/julia"
os.environ['PYTHON_JULIAPKG_OFFLINE'] = 'yes'
os.environ['PYTHON_JULIAPKG_PROJECT'] = '/home/user/julia/environments/v1.6/'
from juliacall import Main as jl, convert as jlconvert
from multiprocessing import Pool
from tqdm import tqdm
import ipdb
def init_worker():
import os
os.environ['PYTHON_JULIAPKG_EXE'] = "/home/user/juliaup/bin/julia"
os.environ['PYTHON_JULIAPKG_OFFLINE'] = 'yes'
os.environ['PYTHON_JULIAPKG_PROJECT'] = '/home/user/.julia/environments/v1.6/'
from juliacall import Main as jl, convert as jlconvert
print('in init_worker()...')
jl.seval('using Pkg')
jl.seval('Pkg.status()')
print('...done')
def compute(jobid):
print(f'in main({jobid})...')
jl.seval('include("test_julia_simple.jl")')
print('...done')
return
def main():
njobs = 10
#start pool with init_worker() as initializer
with Pool(2, initializer=init_worker) as p, tqdm(total=njobs) as pbar:
res = []
for jid in range(njobs):
res.append(p.apply_async(compute, (jid,)))
for r in res:
r.get()
pbar.update(1)
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud)
不确定这是否相关,但错误消息几乎相同 https://github.com/JuliaLang/julia/issues/44969
经过一番评论后,我尝试使用线程池,但在这种情况下,python 因分段错误而失败:
for i in 1:10
println(i)
end
1+2
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
217 次 |
最近记录: |