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导致冻结脚本的其他部分的主要内容,如果未能解决你的问题,请参考以下文章

冻结后使用 QProcess 运行 Python 脚本

多处理池示例不起作用并冻结内核

使用Julia PyCall,在Julia模块中使用matplotlib.pyplot

如果从命令行运行 Julia 脚本,是不是每次都需要重新编译?

cx_冻结。安装后如何安装服务和执行脚本

为啥 STDIN 会导致我的 Perl 程序冻结?