Python导入Julia导致冻结脚本的其他部分
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python导入Julia导致冻结脚本的其他部分相关的知识,希望对你有一定的参考价值。
我使用此命令在Python中调用Julia脚本:
import julia
j = julia.Julia(compiled_modules=False)
j.include("tests/test.jl")
result = j.test()
[之后,我退出执行Julia的python文件,对结果进行一堆计算,然后启动python并行处理池。该过程将冻结,在应将结果从池中返回的那一刻没有发生错误。
[使用Julia,我复制了我一直在Python中用于提高速度的过程。结果完全相同。因此,我的计算不能成为错误的原因。您能否指出导致该错误的其他原因以及如何解决这些错误?
答案
[在Julia中执行多处理时,当多个Julia进程尝试编译同一段代码(包括同一组软件包)时,您可能会遇到编译器追逐。
因此,在进行多处理之前,您需要确保所有Julia东西都已预编译。最好的方法是将所有的Julia代码放入package。您比需要运行一个工人:
using Pkg
Pkg.activate(".") #this assumes that you are in the folder of your package
using YourModuleName
完成此操作后,您可以在所有并行进程中运行所需的任何东西。
基本上,当您有许多使用Python的Julia并行作业时,根本无法控制并发。我宁愿编写分布式的Julia代码并从Python调用它。为了避免冻结,您的Julia代码或多或少看起来像这样:
using Distributed, Pkg
addprocs(4) # insert whatever you need
@everywhere using Distributed, Pkg
Pkg.activate(".")
@everywhere Pkg.activate(".")
using YourModuleName
@everywhere using YourModuleName
res = @distributed (+) for i in 1:10_000
YourModuleName.dosomething(i)
end
[这假设可以使用dosomething(i)
函数对+
的结果进行汇总(通常在这里我更喜欢append
一些DataFrame
)
以上是关于Python导入Julia导致冻结脚本的其他部分的主要内容,如果未能解决你的问题,请参考以下文章
使用Julia PyCall,在Julia模块中使用matplotlib.pyplot