我想在ruby线程中运行Matlab引擎(使用gem matlab-ruby)。我的想法是使用ruby将我的Matlab进程分发到不同的核心。但是,当我尝试从线程内部启动一个新引擎时,我得到一个Trace / BPT陷阱:5错误。
我是ruby的新手,所以在线程上不那么强大等等。我正在尝试做什么,或者只是其中一项无法做到的事情?
要求'matlab'
t1=Thread.new do
engine = Matlab::Engine.new
engine.put_variable "x", 10
engine.put_variable "y", 22
engine.eval "z = x * y"
puts engine.get_variable "z"
end
t1.join
答案 0 :(得分:0)
我想知道如果你在主线程中实例化一个Matlab::Engine
会发生什么,然后按原样运行你的代码:
Matlab::Engine.new # side effect of loading the dynamic lib
t1=Thread.new do
engine = Matlab::Engine.new
engine.put_variable "x", 10
engine.put_variable "y", 22
engine.eval "z = x * y"
puts engine.get_variable "z"
end
t1.join
我问,因为我在使用不同的库(Sinatra / ActiveRecord / pg / etc。)时遇到了Trace / BPT的问题,并且在GBD中运行Ruby时,它崩溃了以下的回溯:
#0 0x00007fff89308590 in __CFInitialize ()
#1 0x00007fff5fc0d5ce in __dyld__ZN16ImageLoaderMachO11doImageInitERKN11ImageLoader11LinkContextE ()
#2 0x00007fff5fc0d607 in __dyld__ZN16ImageLoaderMachO16doInitializationERKN11ImageLoader11LinkContextE ()
#3 0x00007fff5fc0bcec in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEj ()
#4 0x00007fff5fc0bc9d in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEj ()
#5 0x00007fff5fc0bc9d in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEj ()
#6 0x00007fff5fc0bc9d in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEj ()
#7 0x00007fff5fc0bda6 in __dyld__ZN11ImageLoader15runInitializersERKNS_11LinkContextE ()
#8 0x00007fff5fc08fbb in __dyld_dlopen ()
#9 0x00007fff888a7e40 in dlopen ()
#10 0x0000000100001419 in dln_load ()
#11 0x000000010016ad19 in rb_vm_call_cfunc ()
#12 0x0000000100044d22 in rb_require_safe ()
搜索引导我到这个bug report for SBCL,这表明动态库可能只能由主线程加载。