gemb не работает при вызове из потока - PullRequest
1 голос
/ 30 марта 2012

Я бы хотел запустить движок Matlab (используя gem matlab-ruby) внутри потока ruby. Идея состоит в том, чтобы использовать ruby ​​для распределения моих процессов Matlab по разным ядрам. Однако, когда я пытаюсь запустить новый движок из потока, я получаю Trace / BPT trap: 5 error.

Я новичок в рубине, так что не так силен в нитях и так далее. Возможно ли то, что я пытаюсь сделать, или это одна из тех вещей, которые невозможно сделать?

требуется '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

1 Ответ

0 голосов
/ 07 сентября 2012

Интересно, что произойдет, если вы создадите экземпляр 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

Я спрашиваю, потому что у меня возникли проблемы с Trace / BPT с разными библиотеками (Sinatra / ActiveRecord / pg / и т.

#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 ()

Поиск вокруг привел меня к этому отчету об ошибке для SBCL , который предполагает, что динамические библиотеки могут загружаться только основным потоком.

...