2012-03-29 26 views
1

我想在ruby線程中運行Matlab引擎(使用gem matlab-ruby)。這個想法是使用紅寶石分發我的Matlab進程到不同的核心。但是,當我嘗試從線程內部啓動一個新引擎時,我得到一個Trace/BPT陷阱:5錯誤。當從線程調用時,matlab-ruby gem不起作用

我是新來的紅寶石,所以沒有那麼強大的線程等等。是我想要做的事情,還是僅僅是那些無法完成的事情之一?

需要的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

我不知道你在主線程中實例化一個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這表明動態庫只能由主線程加載。

相關問題